{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 数据清理与特征工程"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用朴素贝叶斯完成中文文本分类器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 词云\n",
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "import jieba   # 分词包\n",
    "import numpy\n",
    "import codecs\n",
    "import pandas as pd\n",
    "\n",
    "def preprocess_text(content_lines,sentences,category):\n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append((\" \".join(segs), category))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_com_X_1 = data_com_X[data_com_X.label == 1]\n",
    "data_com_X_0 = data_com_X[data_com_X.label == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 53,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 下采样\n",
    "sentences=[]\n",
    "preprocess_text(data_com_X_1.content.dropna().values.tolist() ,sentences ,'like')\n",
    "n=0\n",
    "while n <20:\n",
    "    preprocess_text(data_com_X_0.content.dropna().values.tolist() ,sentences ,'nlike')\n",
    "    n +=1"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "的确 地方 落下 泪来 nlike\n",
      "自作聪明 nlike\n"
     ]
    }
   ],
   "source": [
    "import random\n",
    "random.shuffle(sentences)\n",
    "for sentence in sentences[:2]:\n",
    "    print(sentence[0], sentence[1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0.872269356854\n"
     ]
    }
   ],
   "source": [
    "from sklearn.cross_validation import StratifiedKFold\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "from sklearn.metrics import accuracy_score,precision_score\n",
    "#from sklearn.model_selection import train_test_split\n",
    "x,y=zip(*sentences)\n",
    "from sklearn.feature_extraction.text import CountVectorizer\n",
    "\n",
    "vec = CountVectorizer(\n",
    "    analyzer='word', # tokenise by character ngrams \n",
    "    ngram_range=(1,4), # use ngrams of size 1 and 2 \n",
    "    max_features=20000, # keep the most common 1000 ngrams\n",
    ")\n",
    "vec.fit(x)\n",
    "\n",
    "def stratifiedkfold_cv(x,y,clf_class,shuffle=True,n_folds=5,**kwargs):\n",
    "    stratifiedk_fold = StratifiedKFold(y, n_folds=n_folds, shuffle=shuffle)\n",
    "    y_pred = y[:]\n",
    "    for train_index, test_index in stratifiedk_fold:\n",
    "        X_train, X_test = x[train_index], x[test_index]\n",
    "        y_train = y[train_index]\n",
    "        clf = clf_class(**kwargs)\n",
    "        clf.fit(X_train,y_train)\n",
    "        y_pred[test_index] = clf.predict(X_test)\n",
    "    return y_pred\n",
    "\n",
    "NB = MultinomialNB\n",
    "print(precision_score(y\n",
    "                      ,stratifiedkfold_cv(vec.transform(x)\n",
    "                                          ,np.array(y),NB)\n",
    "                      , average='macro'))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "from sklearn.feature_extraction.text import CountVectorizer\n",
    "from sklearn.model_selection import train_test_split\n",
    "from sklearn.naive_bayes import MultinomialNB\n",
    "\n",
    "class TextClassifier():\n",
    "    def __init__(self, classifier=MultinomialNB()):\n",
    "        self.classifier = classifier\n",
    "        self.vectorizer = CountVectorizer(analyzer='word'\n",
    "                                          ,ngram_range=(1,4)\n",
    "                                          ,max_features=20000)\n",
    "    def features(self, X):\n",
    "        return self.vectorizer.transform(X)\n",
    "    \n",
    "    def fit(self, X, y):\n",
    "        self.vectorizer.fit(X)\n",
    "        self.classifier.fit(self.features(X), y)\n",
    "        \n",
    "    def predict(self, x):\n",
    "        return self.classifier.predict(self.features([x]))\n",
    "    \n",
    "    def score(self, X, y):\n",
    "        return self.classifier.score(self.features(X), y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 67,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['nlike']\n",
      "['nlike']\n",
      "0.913223140496\n"
     ]
    }
   ],
   "source": [
    "text_classifier=TextClassifier()\n",
    "x_train,x_test,y_train,y_test=train_test_split(x,y,random_state=1234)\n",
    "text_classifier.fit(x_train,y_train)\n",
    "print(text_classifier.predict('一点 不觉得震撼'))\n",
    "print(text_classifier.predict('好看'))\n",
    "print(text_classifier.score(x_test,y_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用SVC完成中文文本分类器"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {},
   "outputs": [],
   "source": [
    "import re\n",
    "from sklearn.feature_extraction.text import TfidfVectorizer \n",
    "from sklearn.model_selection import train_test_split \n",
    "from sklearn.svm import SVC\n",
    "\n",
    "class TextClassifier():\n",
    "    def __init__(self, classifier=SVC(kernel='linear')):\n",
    "        self.classifier = classifier\n",
    "        self.vectorizer = TfidfVectorizer(analyzer='word'\n",
    "                                          ,ngram_range=(1,4)\n",
    "                                          ,max_features=20000)\n",
    "\n",
    "    def features(self, X):\n",
    "        return self.vectorizer.transform(X)\n",
    "    \n",
    "    def fit(self, X, y):\n",
    "        self.vectorizer.fit(X)\n",
    "        self.classifier.fit(self.features(X), y)\n",
    "    \n",
    "    def predict(self, x):\n",
    "        return self.classifier.predict(self.features([x]))\n",
    "    \n",
    "    def score(self, X, y):\n",
    "        return self.classifier.score(self.features(X), y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 69,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "['like']\n",
      "['like']\n",
      "0.971074380165\n"
     ]
    }
   ],
   "source": [
    "text_classifier=TextClassifier()\n",
    "text_classifier.fit(x_train,y_train)\n",
    "print(text_classifier.predict('一点 不觉得震撼'))\n",
    "print(text_classifier.predict('好看'))\n",
    "print(text_classifier.score(x_test,y_test))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用Facebook FastText有监督完成中文文本分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing data to fasttext supervised learning format...\n",
      "done!\n"
     ]
    }
   ],
   "source": [
    "import jieba \n",
    "import pandas as pd \n",
    "import random\n",
    "\n",
    "stopwords=pd.read_csv(\"../stopwords.txt\",index_col=False,quoting=3\n",
    "                      ,sep=\"\\t\",names=['stopword'], encoding='utf-8')\n",
    "stopwords=stopwords['stopword'].values\n",
    "\n",
    "def preprocess_text(content_lines,sentences,category): \n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append(\"__label__\"+str(category)+\" , \"+\" \".join(segs))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue\n",
    "            \n",
    "# 生成训练数据            \n",
    "sentences=[]\n",
    "preprocess_text(data_com_X_1.content.dropna().values.tolist() ,sentences ,'like')\n",
    "n=0\n",
    "while n <20:\n",
    "    preprocess_text(data_com_X_0.content.dropna().values.tolist() ,sentences ,'nlike')\n",
    "    n +=1\n",
    "random.shuffle(sentences)\n",
    "\n",
    "print(\"writing data to fasttext supervised learning format...\")\n",
    "out = open('train_data_supervised_fasttext.txt','w' )#,encoding='utf-8') \n",
    "for sentence in sentences:\n",
    "    out.write(sentence+\"\\n\") \n",
    "print(\"done!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 71,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "P@1: 0.9377753303964758\n",
      "R@1: 0.9377753303964758\n",
      "Number of examples: 1816\n"
     ]
    }
   ],
   "source": [
    "# 调用fastTest模型\n",
    "import fasttext\n",
    "# 有监督\n",
    "classifier=fasttext.supervised('train_data_supervised_fasttext.txt'\n",
    "                               , 'classifier.model' #        \n",
    "                               , label_prefix='__label__')\n",
    "# 对模型进行评估\n",
    "result = classifier.test('train_data_supervised_fasttext.txt')\n",
    "print('P@1:',result.precision)\n",
    "print('R@1:',result.recall)\n",
    "print('Number of examples:',result.nexamples)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "like\n",
      "[('like', 0.820312), ('nlike', 0.177734)]\n"
     ]
    }
   ],
   "source": [
    "# 测试一下实际效果\n",
    "texts = '真心 不好看'\n",
    "labels=classifier.predict(texts)\n",
    "print(labels[0][0])\n",
    "labels=classifier.predict_proba(texts,k=2)\n",
    "print(labels[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用Facebook FastText无监督学习"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {},
   "outputs": [],
   "source": [
    "import jieba \n",
    "import pandas as pd \n",
    "import random\n",
    "\n",
    "stopwords=pd.read_csv(\"../stopwords.txt\",index_col=False,quoting=3\n",
    "                      ,sep=\"\\t\",names=['stopword'], encoding='utf-8')\n",
    "stopwords=stopwords['stopword'].values\n",
    "\n",
    "def preprocess_text_unsupervised(content_lines,sentences,category): \n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append(\" \".join(segs))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "writing data to fasttext unsupervised learning format...\n",
      "done!\n"
     ]
    }
   ],
   "source": [
    "sentences=[]\n",
    "preprocess_text_unsupervised(data_com_X_1.content.dropna().values.tolist() ,sentences ,'like')\n",
    "n=0\n",
    "while n <20:\n",
    "    preprocess_text_unsupervised(data_com_X_0.content.dropna().values.tolist() ,sentences ,'nlike')\n",
    "    n +=1\n",
    "random.shuffle(sentences)\n",
    "\n",
    "print(\"writing data to fasttext unsupervised learning format...\")\n",
    "out=open('train_data_unsupervised_fasttext.txt','w') \n",
    "for sentence in sentences:\n",
    "    out.write(sentence+\"\\n\") \n",
    "print(\"done!\")"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "{'地方', '恐惧', '影视', '向往', '落下', '評分', '永不', '智慧', '總算', 'run', '好看', '激动', '豆瓣', '生活', '好多', '面对', '挖出来', '精妙', '心愿', '不差', '追求', '港译', '深刻', '活着', '时间', '信仰', '狗血', '历历在目', 'end', '橡树', '重获', '结局', '弗里', '惊叹', '社会', '那种', '启发', 'dream', '成功', '奥斯卡', 'hope', '故事', 'thought', '瑞德', '心灵', '触动', 'jail', '羽毛', '囚禁', '努力', '好评', '作品', '之作', '看过', '境界', '不错', '超越', '时个', '鸟儿', '该是', '感人', '穿越', '</s>', '光辉', '这部', '要命', 'Can', '变奏', '欣赏', '内心', '体制', '泪来', '1999', '环境', '阶梯教室', '赞誉', '不想', 'busy', '明白', 'escape', '决绝', '几遍', 'Nice', '冲动', '剧情', '传闻中', 'Hope', '诠释', 'bbm', '黑暗', '喜欢', '这是', '電影', '类型', '真的', '只能', '主题', '约会', 'nice', 'At', '好片', 'dying', '呼唤', '基督山', '演员', '毅力', '感受', '当年', '神作', '一部', '大众', '关不住', '一遍', '硕大', '梦想', '摩根', '过度', '第一', '上班族', '东西', '永远', '勇敢', '放弃', '美好', 'movie', '解救', '国产片', '厉害', '好奇', 'plan', '友情', '没看', '挺难', '很棒', '脱离', '妻子', '意义', '四星', '确实', '原著', '人性', '片子', '电影版', '心中', '习惯', '鉴赏', '渴望', '假释', '那個', '值得', '最高分', '红歌', '知识', '更好', '力量', '精神', 'good', 'make', '希望', '排名', '這部', '出狱', '励志', '蒂姆', '不觉', '每次', '茫然失措', '感冒', '绝望', '救赎', 'patience', '震撼', '一般般', '影片', '肖申克', '复制', '编剧', '后果', '评价', '两个', '自由', '没什么', '五星', '斯蒂芬', '圣经', '经典', 'imdb', '事情', '自我', '阿甘', '也许', '男人', '监狱', '刺激', '一点', '害得', 'Trailer', '原來', '音乐', '超级', '电影', '解释', 'Your', '本片', '高于', '发现', 'living', '阿甘正传', '使人', '水平', 'power', '充满', '完美', '第一次', '心式', '沦为', '遍看', '自作聪明', '人生', 'Get', '囚犯', '无冕之王', '世界', '带来', '收藏', '鏡頭', '暖暖的', 'IMDB', '失望', 'Shawshank', '可怕', '想要', '一棵', '配乐', 'Andy', '审美', '几个', '五百', '经典影片', '突兀', '好处', '必看', '当作', '生命', '小说', '名字', '美国', '感觉', '精彩', '大智大勇', '提升', '越狱', '满分', 'realization', '伯爵', '不行', '安迪', '盒子', '地步', '强大', 'thing', '巧合', '多年', '一种', '主人公', 'friend', '明明', '信念', '那份', '虚假', 'scared', '终于', '給了'}\n"
     ]
    }
   ],
   "source": [
    "import fasttext\n",
    "# Skipgram model\n",
    "model=fasttext.skipgram('train_data_unsupervised_fasttext.txt','model') \n",
    "print(model.words) # list of words in dictionary\n",
    "# CBOW model\n",
    "#model=fasttext.cbow('train_data_unsupervised_fasttext.txt','model') \n",
    "#print(model.words) # list of words in dictionary"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用CNN做中文文本分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {},
   "outputs": [],
   "source": [
    "import jieba \n",
    "import pandas as pd \n",
    "import random\n",
    "\n",
    "stopwords=pd.read_csv(\"../stopwords.txt\",index_col=False,quoting=3\n",
    "                      ,sep=\"\\t\",names=['stopword'], encoding='utf-8')\n",
    "stopwords=stopwords['stopword'].values\n",
    "\n",
    "def preprocess_text(content_lines,sentences,category): \n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append((\" \".join(segs), category))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue\n",
    "            \n",
    "sentences=[]\n",
    "preprocess_text(data_com_X_1.content.dropna().values.tolist() ,sentences ,'like')\n",
    "n=0\n",
    "while n <20:\n",
    "    preprocess_text(data_com_X_0.content.dropna().values.tolist() ,sentences ,'nlike')\n",
    "    n +=1\n",
    "random.shuffle(sentences)     \n",
    "\n",
    "from sklearn.model_selection import train_test_split\n",
    "x,y=zip(*sentences)\n",
    "train_data,test_data,train_target,test_target=train_test_split(x, y, random_state=1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "基于卷积神经网络的中文文本分类\n",
    "\"\"\"\n",
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import argparse\n",
    "import sys\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "import tensorflow as tf\n",
    "\n",
    "learn = tf.contrib.learn\n",
    "FLAGS = None\n",
    "# 文档最长长度\n",
    "MAX_DOCUMENT_LENGTH = 100\n",
    "# 最小词频数\n",
    "MIN_WORD_FREQUENCE = 2\n",
    "# 词嵌入的维度\n",
    "EMBEDDING_SIZE = 20\n",
    "# filter个数\n",
    "N_FILTERS = 10 # 10个神经元\n",
    "# 感知野大小\n",
    "WINDOW_SIZE = 20\n",
    "#filter的形状\n",
    "FILTER_SHAPE1 = [WINDOW_SIZE, EMBEDDING_SIZE]\n",
    "FILTER_SHAPE2 = [WINDOW_SIZE, N_FILTERS] \n",
    "# 池化\n",
    "POOLING_WINDOW = 4\n",
    "POOLING_STRIDE = 2\n",
    "n_words = 0\n",
    "\n",
    "def cnn_model(features, target):\n",
    "    \"\"\"\n",
    "    2层的卷积神经网络，用于短文本分类\n",
    "    \"\"\"\n",
    "    # 先把词转成词嵌入\n",
    "    # 我们得到一个形状为[n_words, EMBEDDING_SIZE]的词表映射矩阵\n",
    "    # 接着我们可以把一批文本映射成[batch_size, sequence_length,EMBEDDING_SIZE]的矩阵形式\n",
    "    target = tf.one_hot(target, 15, 1, 0) #对词编码\n",
    "    word_vectors = tf.contrib.layers.embed_sequence(features\n",
    "                                                    ,vocab_size=n_words\n",
    "                                                    ,embed_dim=EMBEDDING_SIZE\n",
    "                                                    ,scope='words')\n",
    "    word_vectors = tf.expand_dims(word_vectors, 3)\n",
    "    with tf.variable_scope('CNN_Layer1'):\n",
    "        # 添加卷积层做滤波\n",
    "        conv1 = tf.contrib.layers.convolution2d(word_vectors\n",
    "                                                ,N_FILTERS\n",
    "                                                ,FILTER_SHAPE1\n",
    "                                                ,padding='VALID')\n",
    "        # 添加RELU非线性\n",
    "        conv1 = tf.nn.relu(conv1) \n",
    "        # 最大池化\n",
    "        pool1 = tf.nn.max_pool(conv1\n",
    "                               ,ksize=[1, POOLING_WINDOW, 1, 1]\n",
    "                               ,strides=[1, POOLING_STRIDE, 1, 1]\n",
    "                               ,padding='SAME')\n",
    "        # 对矩阵进行转置，以满足形状\n",
    "        pool1 = tf.transpose(pool1, [0, 1, 3, 2])\n",
    "    with tf.variable_scope('CNN_Layer2'):\n",
    "        # 第2卷积层\n",
    "        conv2 = tf.contrib.layers.convolution2d(pool1\n",
    "                                                ,N_FILTERS\n",
    "                                                ,FILTER_SHAPE2\n",
    "                                                ,padding='VALID') \n",
    "        # 抽取特征\n",
    "        pool2 = tf.squeeze(tf.reduce_max(conv2, 1), squeeze_dims=[1])\n",
    "        \n",
    "    # 全连接层\n",
    "    logits = tf.contrib.layers.fully_connected(pool2, 15, activation_fn=None)\n",
    "    loss = tf.losses.softmax_cross_entropy(target, logits) \n",
    "    # 优化器\n",
    "    train_op = tf.contrib.layers.optimize_loss(loss\n",
    "                                               ,tf.contrib.framework.get_global_step()\n",
    "                                               ,optimizer='Adam'\n",
    "                                               ,learning_rate=0.01)\n",
    "    \n",
    "    return ({\n",
    "            'class': tf.argmax(logits, 1),\n",
    "            'prob': tf.nn.softmax(logits)\n",
    "    }, loss, train_op)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total words:404\n"
     ]
    }
   ],
   "source": [
    "global n_words\n",
    "# 处理词汇\n",
    "vocab_processor = learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH\n",
    "                                                          ,min_frequency=MIN_WORD_FREQUENCE) \n",
    "x_train = np.array(list(vocab_processor.fit_transform(train_data)))\n",
    "x_test = np.array(list(vocab_processor.transform(test_data)))\n",
    "n_words=len(vocab_processor.vocabulary_) \n",
    "print('Total words:%d'%n_words)\n",
    "\n",
    "cate_dic={'like':1,'nlike':0}\n",
    "y_train = pd.Series(train_target).apply(lambda x:cate_dic[x] , train_target)\n",
    "y_test = pd.Series(test_target).apply(lambda x:cate_dic[x] , test_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Using default config.\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpqmjhhkun\n",
      "INFO:tensorflow:Using config: {'_evaluation_master': '', '_save_summary_steps': 100, '_session_config': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x1570ddc50>, '_is_chief': True, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_checkpoints_secs': 600, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpqmjhhkun', '_environment': 'local', '_num_worker_replicas': 0, '_num_ps_replicas': 0, '_master': '', '_task_id': 0, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_task_type': None}\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Saving checkpoints for 1 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpqmjhhkun/model.ckpt.\n",
      "INFO:tensorflow:step = 1, loss = 2.70766\n",
      "INFO:tensorflow:global_step/sec: 10.5174\n",
      "INFO:tensorflow:step = 101, loss = 0.690472 (9.510 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.2301\n",
      "INFO:tensorflow:step = 201, loss = 0.142747 (9.774 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.2239\n",
      "INFO:tensorflow:step = 301, loss = 0.100042 (9.783 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.4414\n",
      "INFO:tensorflow:step = 401, loss = 0.0862143 (9.577 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.6636\n",
      "INFO:tensorflow:step = 501, loss = 0.0856658 (9.378 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.4687\n",
      "INFO:tensorflow:step = 601, loss = 0.115627 (9.551 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.2872\n",
      "INFO:tensorflow:step = 701, loss = 0.095318 (9.721 sec)\n"
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-137-56ed2740d6d5>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      3\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m \u001b[0;31m# 训练和预测\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m \u001b[0mclassifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_train\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my_train\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m1000\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0my_predicted\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mclassifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_test\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'class'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m \u001b[0mscore\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmetrics\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0maccuracy_score\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0my_test\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my_predicted\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, batch_size, steps, max_steps, monitors)\u001b[0m\n\u001b[1;32m   1348\u001b[0m                         \u001b[0msteps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1349\u001b[0m                         \u001b[0mmax_steps\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mmax_steps\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1350\u001b[0;31m                         monitors=all_monitors)\n\u001b[0m\u001b[1;32m   1351\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1352\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/util/deprecation.py\u001b[0m in \u001b[0;36mnew_func\u001b[0;34m(*args, **kwargs)\u001b[0m\n\u001b[1;32m    287\u001b[0m             \u001b[0;34m'in a future version'\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mdate\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0;34m'after %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mdate\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    288\u001b[0m             instructions)\n\u001b[0;32m--> 289\u001b[0;31m       \u001b[0;32mreturn\u001b[0m \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    290\u001b[0m     return tf_decorator.make_decorator(func, new_func, 'deprecated',\n\u001b[1;32m    291\u001b[0m                                        _add_deprecated_arg_notice_to_docstring(\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py\u001b[0m in \u001b[0;36mfit\u001b[0;34m(self, x, y, input_fn, steps, batch_size, monitors, max_steps)\u001b[0m\n\u001b[1;32m    453\u001b[0m       \u001b[0mhooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mappend\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mbasic_session_run_hooks\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mStopAtStepHook\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msteps\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmax_steps\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    454\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 455\u001b[0;31m     \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_train_model\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0minput_fn\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0minput_fn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhooks\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mhooks\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    456\u001b[0m     \u001b[0mlogging\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0minfo\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Loss for final step: %s.'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    457\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/learn/python/learn/estimators/estimator.py\u001b[0m in \u001b[0;36m_train_model\u001b[0;34m(self, input_fn, hooks)\u001b[0m\n\u001b[1;32m   1005\u001b[0m         \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1006\u001b[0m         \u001b[0;32mwhile\u001b[0m \u001b[0;32mnot\u001b[0m \u001b[0mmon_sess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mshould_stop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1007\u001b[0;31m           \u001b[0m_\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mloss\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmon_sess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mmodel_fn_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtrain_op\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mmodel_fn_ops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mloss\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1008\u001b[0m       \u001b[0msummary_io\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mSummaryWriterCache\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclear\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1009\u001b[0m       \u001b[0;32mreturn\u001b[0m \u001b[0mloss\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/training/monitored_session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m    503\u001b[0m                           \u001b[0mfeed_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    504\u001b[0m                           \u001b[0moptions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 505\u001b[0;31m                           run_metadata=run_metadata)\n\u001b[0m\u001b[1;32m    506\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    507\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0mshould_stop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/training/monitored_session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m    840\u001b[0m                               \u001b[0mfeed_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    841\u001b[0m                               \u001b[0moptions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 842\u001b[0;31m                               run_metadata=run_metadata)\n\u001b[0m\u001b[1;32m    843\u001b[0m       \u001b[0;32mexcept\u001b[0m \u001b[0m_PREEMPTION_ERRORS\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    844\u001b[0m         logging.info('An error was raised. This may be due to a preemption in '\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/training/monitored_session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    796\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    797\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 798\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    799\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    800\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/training/monitored_session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m    950\u001b[0m                                   \u001b[0mfeed_dict\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    951\u001b[0m                                   \u001b[0moptions\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0moptions\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 952\u001b[0;31m                                   run_metadata=run_metadata)\n\u001b[0m\u001b[1;32m    953\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    954\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mhook\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_hooks\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/training/monitored_session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, *args, **kwargs)\u001b[0m\n\u001b[1;32m    796\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    797\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 798\u001b[0;31m     \u001b[0;32mreturn\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_sess\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrun\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    799\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    800\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36mrun\u001b[0;34m(self, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m    787\u001b[0m     \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    788\u001b[0m       result = self._run(None, fetches, feed_dict, options_ptr,\n\u001b[0;32m--> 789\u001b[0;31m                          run_metadata_ptr)\n\u001b[0m\u001b[1;32m    790\u001b[0m       \u001b[0;32mif\u001b[0m \u001b[0mrun_metadata\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    791\u001b[0m         \u001b[0mproto_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf_session\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetBuffer\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mrun_metadata_ptr\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_run\u001b[0;34m(self, handle, fetches, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m    995\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mfinal_fetches\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mfinal_targets\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    996\u001b[0m       results = self._do_run(handle, final_targets, final_fetches,\n\u001b[0;32m--> 997\u001b[0;31m                              feed_dict_string, options, run_metadata)\n\u001b[0m\u001b[1;32m    998\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    999\u001b[0m       \u001b[0mresults\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_do_run\u001b[0;34m(self, handle, target_list, fetch_list, feed_dict, options, run_metadata)\u001b[0m\n\u001b[1;32m   1130\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mhandle\u001b[0m \u001b[0;32mis\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1131\u001b[0m       return self._do_call(_run_fn, self._session, feed_dict, fetch_list,\n\u001b[0;32m-> 1132\u001b[0;31m                            target_list, options, run_metadata)\n\u001b[0m\u001b[1;32m   1133\u001b[0m     \u001b[0;32melse\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1134\u001b[0m       return self._do_call(_prun_fn, self._session, handle, feed_dict,\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_do_call\u001b[0;34m(self, fn, *args)\u001b[0m\n\u001b[1;32m   1137\u001b[0m   \u001b[0;32mdef\u001b[0m \u001b[0m_do_call\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1138\u001b[0m     \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1139\u001b[0;31m       \u001b[0;32mreturn\u001b[0m \u001b[0mfn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0margs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   1140\u001b[0m     \u001b[0;32mexcept\u001b[0m \u001b[0merrors\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mOpError\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0me\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1141\u001b[0m       \u001b[0mmessage\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mcompat\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mas_text\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0me\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmessage\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/client/session.py\u001b[0m in \u001b[0;36m_run_fn\u001b[0;34m(session, feed_dict, fetch_list, target_list, options, run_metadata)\u001b[0m\n\u001b[1;32m   1119\u001b[0m         return tf_session.TF_Run(session, options,\n\u001b[1;32m   1120\u001b[0m                                  \u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtarget_list\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 1121\u001b[0;31m                                  status, run_metadata)\n\u001b[0m\u001b[1;32m   1122\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   1123\u001b[0m     \u001b[0;32mdef\u001b[0m \u001b[0m_prun_fn\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0msession\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mhandle\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfeed_dict\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfetch_list\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "# 构建模型\n",
    "classifier=learn.SKCompat(learn.Estimator(model_fn=cnn_model))\n",
    "\n",
    "# 训练和预测\n",
    "classifier.fit(x_train,y_train,steps=1000) \n",
    "y_predicted=classifier.predict(x_test)['class'] \n",
    "score=metrics.accuracy_score(y_test,y_predicted) \n",
    "print('Accuracy:{0:f}'.format(score))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用RNN做中文文本分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {},
   "outputs": [],
   "source": [
    "\"\"\"\n",
    "使用RNN完成文本分类\n",
    "\"\"\"\n",
    "\n",
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import argparse\n",
    "import sys\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "import tensorflow as tf\n",
    "from tensorflow.contrib.layers.python.layers import encoders\n",
    "\n",
    "learn = tf.contrib.learn\n",
    "\n",
    "FALGS = None"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'train_data' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-21-09729f23a752>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      7\u001b[0m vocab_processor = learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH\n\u001b[1;32m      8\u001b[0m                                                           ,min_frequency=MIN_WORD_FREQUENCE)\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mx_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     10\u001b[0m \u001b[0mx_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0mn_words\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvocabulary_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'train_data' is not defined"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'train_data' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-21-09729f23a752>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      7\u001b[0m vocab_processor = learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH\n\u001b[1;32m      8\u001b[0m                                                           ,min_frequency=MIN_WORD_FREQUENCE)\n\u001b[0;32m----> 9\u001b[0;31m \u001b[0mx_train\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfit_transform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtrain_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     10\u001b[0m \u001b[0mx_test\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mtest_data\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0mn_words\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mlen\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvocabulary_\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'train_data' is not defined"
     ]
    }
   ],
   "source": [
    "MAX_DOCUMENT_LENGTH=15\n",
    "MIN_WORD_FREQUENCE=1\n",
    "EMBEDDING_SIZE=50\n",
    "global n_words\n",
    "\n",
    "# 处理词汇\n",
    "vocab_processor = learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH\n",
    "                                                          ,min_frequency=MIN_WORD_FREQUENCE)\n",
    "x_train = np.array(list(vocab_processor.fit_transform(train_data)))\n",
    "x_test = np.array(list(vocab_processor.transform(test_data))) \n",
    "n_words = len(vocab_processor.vocabulary_)\n",
    "print('Total words: %d' % n_words)\n",
    "\n",
    "def bag_of_words_model(features, target): \n",
    "    \"\"\"\n",
    "    先转成词袋模型\n",
    "    \"\"\"\n",
    "    target = tf.one_hot(target, 15, 1, 0)\n",
    "    features = encoders.bow_encoder(features\n",
    "                                    ,vocab_size=n_words\n",
    "                                    ,embed_dim=EMBEDDING_SIZE)\n",
    "    logits = tf.contrib.layers.fully_connected(features, 15\n",
    "                                               ,activation_fn=None)\n",
    "    loss = tf.contrib.losses.softmax_cross_entropy(logits, target)\n",
    "    train_op = tf.contrib.layers.optimize_loss(loss\n",
    "                                               ,tf.contrib.framework.get_global_step()\n",
    "                                               ,optimizer='Adam'\n",
    "                                               ,learning_rate=0.01)\n",
    "    return ({\n",
    "            'class': tf.argmax(logits, 1),\n",
    "            'prob': tf.nn.softmax(logits)\n",
    "    }, loss, train_op)\n",
    "\n",
    "model_fn = bag_of_words_model\n",
    "classifier = learn.SKCompat(learn.Estimator(model_fn=model_fn))\n",
    "\n",
    "# Train and predict\n",
    "classifier.fit(x_train, y_train, steps=1000)\n",
    "y_predicted = classifier.predict(x_test)['class']\n",
    "score = metrics.accuracy_score(y_test, y_predicted)\n",
    "print('Accuracy: {0:f}'.format(score))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 用GRU来完成中文文本分类"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Using default config.\n",
      "INFO:tensorflow:Using default config.\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe\n",
      "INFO:tensorflow:Using config: {'_evaluation_master': '', '_save_summary_steps': 100, '_session_config': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x13d895f98>, '_is_chief': True, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_checkpoints_secs': 600, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe', '_environment': 'local', '_num_worker_replicas': 0, '_num_ps_replicas': 0, '_master': '', '_task_id': 0, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_task_type': None}\n",
      "INFO:tensorflow:Using config: {'_evaluation_master': '', '_save_summary_steps': 100, '_session_config': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x13d895f98>, '_is_chief': True, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_checkpoints_secs': 600, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe', '_environment': 'local', '_num_worker_replicas': 0, '_num_ps_replicas': 0, '_master': '', '_task_id': 0, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_task_type': None}\n",
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Saving checkpoints for 1 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt.\n",
      "INFO:tensorflow:Saving checkpoints for 1 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt.\n",
      "INFO:tensorflow:step = 1, loss = 2.75137\n",
      "INFO:tensorflow:step = 1, loss = 2.75137\n",
      "INFO:tensorflow:global_step/sec: 42.6368\n",
      "INFO:tensorflow:global_step/sec: 42.6368\n",
      "INFO:tensorflow:step = 101, loss = 0.074049 (2.345 sec)\n",
      "INFO:tensorflow:step = 101, loss = 0.074049 (2.345 sec)\n",
      "INFO:tensorflow:global_step/sec: 36.7961\n",
      "INFO:tensorflow:global_step/sec: 36.7961\n",
      "INFO:tensorflow:step = 201, loss = 0.0463662 (2.718 sec)\n",
      "INFO:tensorflow:step = 201, loss = 0.0463662 (2.718 sec)\n",
      "INFO:tensorflow:global_step/sec: 45.4508\n",
      "INFO:tensorflow:global_step/sec: 45.4508\n",
      "INFO:tensorflow:step = 301, loss = 0.0402248 (2.200 sec)\n",
      "INFO:tensorflow:step = 301, loss = 0.0402248 (2.200 sec)\n",
      "INFO:tensorflow:global_step/sec: 45.6122\n",
      "INFO:tensorflow:global_step/sec: 45.6122\n",
      "INFO:tensorflow:step = 401, loss = 0.0422455 (2.193 sec)\n",
      "INFO:tensorflow:step = 401, loss = 0.0422455 (2.193 sec)\n",
      "INFO:tensorflow:global_step/sec: 40.393\n",
      "INFO:tensorflow:global_step/sec: 40.393\n",
      "INFO:tensorflow:step = 501, loss = 0.106387 (2.484 sec)\n",
      "INFO:tensorflow:step = 501, loss = 0.106387 (2.484 sec)\n",
      "INFO:tensorflow:global_step/sec: 22.6465\n",
      "INFO:tensorflow:global_step/sec: 22.6465\n",
      "INFO:tensorflow:step = 601, loss = 0.0338849 (4.409 sec)\n",
      "INFO:tensorflow:step = 601, loss = 0.0338849 (4.409 sec)\n",
      "INFO:tensorflow:global_step/sec: 45.0452\n",
      "INFO:tensorflow:global_step/sec: 45.0452\n",
      "INFO:tensorflow:step = 701, loss = 0.0732922 (2.218 sec)\n",
      "INFO:tensorflow:step = 701, loss = 0.0732922 (2.218 sec)\n",
      "INFO:tensorflow:global_step/sec: 43.0616\n",
      "INFO:tensorflow:global_step/sec: 43.0616\n",
      "INFO:tensorflow:step = 801, loss = 0.0332565 (2.322 sec)\n",
      "INFO:tensorflow:step = 801, loss = 0.0332565 (2.322 sec)\n",
      "INFO:tensorflow:global_step/sec: 42.0098\n",
      "INFO:tensorflow:global_step/sec: 42.0098\n",
      "INFO:tensorflow:step = 901, loss = 0.0436858 (2.381 sec)\n",
      "INFO:tensorflow:step = 901, loss = 0.0436858 (2.381 sec)\n",
      "INFO:tensorflow:Saving checkpoints for 1000 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt.\n",
      "INFO:tensorflow:Saving checkpoints for 1000 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt.\n",
      "INFO:tensorflow:Loss for final step: 0.0621306.\n",
      "INFO:tensorflow:Loss for final step: 0.0621306.\n",
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt-1000\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt-1000\n",
      "Accuracy:0.933884\n",
      "Accuracy:0.933884\n"
     ]
    }
   ],
   "source": [
    "def rnn_model(features,target): \n",
    "    \"\"\"\n",
    "    用RNN模型（这里用的是GRU）完成文本分类\n",
    "    \"\"\"\n",
    "    # Convert indexes of words into embeddings.\n",
    "    # This creates embeddings matrix of [n_words, EMBEDDING_SIZE] and then\n",
    "    # maps word indexes of the sequence into [batch_size,sequence_length,\n",
    "    # EMBEDDING_SIZE].\n",
    "    word_vectors = tf.contrib.layers.embed_sequence(features\n",
    "                                                    ,vocab_size=n_words\n",
    "                                                    ,embed_dim=EMBEDDING_SIZE\n",
    "                                                    ,scope='words')\n",
    "    # Split into list of embedding per word, while removing doc length dim。\n",
    "    # word_list results to be a list of tensors [batch_size,EMBEDDING_SIZE].\n",
    "    word_list = tf.unstack(word_vectors, axis=1)\n",
    "    \n",
    "    # Create a Gated Recurrent Unit cell with hidden size of EMBEDDING_SIZE.\n",
    "    cell = tf.contrib.rnn.GRUCell(EMBEDDING_SIZE)\n",
    "    \n",
    "    # Create an unrolled Recurrent Neural Networks to length of\n",
    "    # MAX_DOCUMENT_LENGTH and passes word_list as inputs for each unit.\n",
    "    _, encoding = tf.contrib.rnn.static_rnn(cell, word_list, dtype=tf.float32)\n",
    "    \n",
    "    # Given encoding of RNN, take encoding of last step (e.g hidden size of the\n",
    "    # neural network of last step) and pass it as features for logistic\n",
    "    # regression over output classes.\n",
    "    target = tf.one_hot(target, 15, 1, 0)\n",
    "    logits = tf.contrib.layers.fully_connected(encoding, 15, activation_fn=None)\n",
    "    loss = tf.contrib.losses.softmax_cross_entropy(logits, target)\n",
    "    \n",
    "    # Create a training op.\n",
    "    train_op = tf.contrib.layers.optimize_loss(\n",
    "            loss,\n",
    "            tf.contrib.framework.get_global_step(),\n",
    "            optimizer='Adam',\n",
    "            learning_rate=0.01)\n",
    "    \n",
    "    return ({\n",
    "            'class': tf.argmax(logits, 1),\n",
    "            'prob': tf.nn.softmax(logits)\n",
    "    }, loss, train_op)\n",
    "\n",
    "\n",
    "model_fn = rnn_model \n",
    "classifier=learn.SKCompat(learn.Estimator(model_fn=model_fn))\n",
    "\n",
    "#Train and predict\n",
    "classifier.fit(x_train,y_train,steps=1000) \n",
    "y_predicted=classifier.predict(x_test)['class']\n",
    "score=metrics.accuracy_score(y_test,y_predicted)\n",
    "print('Accuracy:{0:f}'.format(score))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt-1000\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt-1000\n",
      "like\n",
      "like\n",
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From <ipython-input-34-c28adaa0944c>:29: softmax_cross_entropy (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.softmax_cross_entropy instead. Note that the order of the logits and labels arguments has been changed.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:398: compute_weighted_loss (from tensorflow.contrib.losses.python.losses.loss_ops) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.compute_weighted_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "WARNING:tensorflow:From /usr/local/lib/python3.5/site-packages/tensorflow/contrib/losses/python/losses/loss_ops.py:151: add_arg_scope.<locals>.func_with_args (from tensorflow.contrib.framework.python.ops.arg_scope) is deprecated and will be removed after 2016-12-30.\n",
      "Instructions for updating:\n",
      "Use tf.losses.add_loss instead.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt-1000\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp8ty32mwe/model.ckpt-1000\n",
      "like\n",
      "like\n"
     ]
    }
   ],
   "source": [
    "def pred(commment):\n",
    "    sentences=[]\n",
    "    preprocess_text([commment] ,sentences, 'unknown')\n",
    "    x,y=zip(*sentences)\n",
    "    x_tt = np.array(list(vocab_processor.transform([x[0]])))\n",
    "    \n",
    "    if classifier.predict(x_tt)['class'][0]:\n",
    "        print('like')\n",
    "    else:\n",
    "        print('nlike')\n",
    "pred('好精彩的电影！')\n",
    "pred('烂片啊！')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 2. 全部影片的短评数据分析"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>comment_id</th>\n",
       "      <th>content</th>\n",
       "      <th>movie_id</th>\n",
       "      <th>people</th>\n",
       "      <th>star</th>\n",
       "      <th>time</th>\n",
       "      <th>useful_num</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>34253734</td>\n",
       "      <td>真的不喜欢，不好看，没感觉</td>\n",
       "      <td>1292052</td>\n",
       "      <td>九尾黑猫</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-03-19 00:32:02</td>\n",
       "      <td>1107</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>6040147</td>\n",
       "      <td>有那么好吗？？？？？</td>\n",
       "      <td>1292052</td>\n",
       "      <td>我不绝望</td>\n",
       "      <td>2</td>\n",
       "      <td>2006-10-05 22:11:30</td>\n",
       "      <td>391</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>39174583</td>\n",
       "      <td>好看在哪里了？竟然这么多人喜欢，奇怪。</td>\n",
       "      <td>2365260</td>\n",
       "      <td>女魔头</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-05-02 15:53:09</td>\n",
       "      <td>482</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>39349806</td>\n",
       "      <td>俊男靓女也无法阻止它迈向闷片的步伐。</td>\n",
       "      <td>2365260</td>\n",
       "      <td>飞天PP猪</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-05-03 21:31:59</td>\n",
       "      <td>252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>54777342</td>\n",
       "      <td>没有什么惊天动地的,翻天覆地的,纯纯的,轻轻的,却让眼睛忍不住一下就酸了。TONG跟MEW的...</td>\n",
       "      <td>2365260</td>\n",
       "      <td>尼桑，都是尼桑的错</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-08-17 09:12:54</td>\n",
       "      <td>105</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>38237626</td>\n",
       "      <td>——太多的爱，即使会让我们犯了错；但比起未曾为爱做过任何事好太多了，不是吗？\\r\\n——如果...</td>\n",
       "      <td>2365260</td>\n",
       "      <td>逍遥兽</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-04-24 22:37:45</td>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>9350578</td>\n",
       "      <td>太扯了，两个男人，在一起生活了几百年，没有其他伴侣，竟然什么都没发生？</td>\n",
       "      <td>1299327</td>\n",
       "      <td>harumi</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-01-18 18:20:00</td>\n",
       "      <td>2140</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>513057700</td>\n",
       "      <td>小时候看过一部电影，主角是个基佬，基佬找了个男人，但那个男人是个罗莉控。他和萝莉暗算了基佬，...</td>\n",
       "      <td>1299327</td>\n",
       "      <td>陆秋槎</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-03-26 23:26:29</td>\n",
       "      <td>786</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>47300430</td>\n",
       "      <td>暴殄天物啊！攥着三个超级大帅哥就拍成了这样？看不懂~~</td>\n",
       "      <td>1299327</td>\n",
       "      <td>战国客</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-07-01 13:59:14</td>\n",
       "      <td>260</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>2099700</td>\n",
       "      <td>没看完就看不下去了</td>\n",
       "      <td>1299327</td>\n",
       "      <td>nadja</td>\n",
       "      <td>2</td>\n",
       "      <td>2006-03-25 18:35:26</td>\n",
       "      <td>97</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>301775590</td>\n",
       "      <td>三个小孩子太烦了，情感转变毫无逻辑（不是两秒钟的“张大眼睛作无辜状”就是可爱了的）。整个情节...</td>\n",
       "      <td>3287562</td>\n",
       "      <td>bayer04</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-10-08 04:19:29</td>\n",
       "      <td>666</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>322762449</td>\n",
       "      <td>为啥我很不喜欢哪三个看似可怜的小孩？很不喜欢的那种很不喜欢……</td>\n",
       "      <td>3287562</td>\n",
       "      <td>老六</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-12-05 01:58:15</td>\n",
       "      <td>585</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>177776822</td>\n",
       "      <td>内容低质化，笑点成人化，对手弱智化，背景莫名化</td>\n",
       "      <td>3287562</td>\n",
       "      <td>小偷|隐忍沉定</td>\n",
       "      <td>1</td>\n",
       "      <td>2010-12-07 11:48:46</td>\n",
       "      <td>233</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>136</th>\n",
       "      <td>234105420</td>\n",
       "      <td>我们的眼泪到底有多廉价？</td>\n",
       "      <td>3792799</td>\n",
       "      <td>比多</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-04-24 23:04:26</td>\n",
       "      <td>140</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>137</th>\n",
       "      <td>268881468</td>\n",
       "      <td>谁想到这么狗血。。。有种不停听人讲道理的感觉</td>\n",
       "      <td>3792799</td>\n",
       "      <td>九尾黑猫</td>\n",
       "      <td>1</td>\n",
       "      <td>2010-07-09 19:48:44</td>\n",
       "      <td>142</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>1897756</td>\n",
       "      <td>侮辱钢琴。</td>\n",
       "      <td>1292001</td>\n",
       "      <td>荔枝超人</td>\n",
       "      <td>1</td>\n",
       "      <td>2006-03-12 20:57:42</td>\n",
       "      <td>2112</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>83714566</td>\n",
       "      <td>纯傻逼！！！多稳妥的故事让伪善者托纳托雷拍成了纯傻逼！！！多少细节都散发着矫揉造作的腥臭！！...</td>\n",
       "      <td>1292001</td>\n",
       "      <td>撕撕撕</td>\n",
       "      <td>2</td>\n",
       "      <td>2009-05-23 15:19:33</td>\n",
       "      <td>1512</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>146</th>\n",
       "      <td>34253873</td>\n",
       "      <td>不喜欢，没共鸣。</td>\n",
       "      <td>1292001</td>\n",
       "      <td>九尾黑猫</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-03-19 00:34:26</td>\n",
       "      <td>849</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>12062592</td>\n",
       "      <td>也就音乐还算可以，Tim Roth太猥琐，不适合演这种文绉绉的角色</td>\n",
       "      <td>1292001</td>\n",
       "      <td>大宸</td>\n",
       "      <td>2</td>\n",
       "      <td>2007-11-08 17:51:25</td>\n",
       "      <td>525</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>151</th>\n",
       "      <td>1467680</td>\n",
       "      <td>giuseppe tornatore的三部曲之一------陆地？陆地对我来说是一艘太大的船...</td>\n",
       "      <td>1292001</td>\n",
       "      <td>独行狼</td>\n",
       "      <td>0</td>\n",
       "      <td>2006-02-11 13:44:40</td>\n",
       "      <td>556</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>153</th>\n",
       "      <td>587048396</td>\n",
       "      <td>这么多年我还是没有看完这部高分片……从一开始的故事带出演员表演方式我就知道不是我的菜 越往下...</td>\n",
       "      <td>1292001</td>\n",
       "      <td>Cactus</td>\n",
       "      <td>1</td>\n",
       "      <td>2012-10-03 21:04:54</td>\n",
       "      <td>339</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>110362924</td>\n",
       "      <td>不伦不类</td>\n",
       "      <td>1292001</td>\n",
       "      <td>周萨萨。</td>\n",
       "      <td>2</td>\n",
       "      <td>2009-04-06 11:50:53</td>\n",
       "      <td>196</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>22839898</td>\n",
       "      <td>令人感动的宅男，让我想起了树上的男爵</td>\n",
       "      <td>1292001</td>\n",
       "      <td>小波福娃</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-10-29 18:18:06</td>\n",
       "      <td>146</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>170</th>\n",
       "      <td>325148038</td>\n",
       "      <td>25-30岁待业青年的精神寄托</td>\n",
       "      <td>1292213</td>\n",
       "      <td>十七只猫和鱼</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-12-11 10:07:01</td>\n",
       "      <td>1458</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>172</th>\n",
       "      <td>2573153</td>\n",
       "      <td>看了不下20遍，彻底看伤了。</td>\n",
       "      <td>1292213</td>\n",
       "      <td>林愈静</td>\n",
       "      <td>0</td>\n",
       "      <td>2006-04-22 13:09:37</td>\n",
       "      <td>946</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>187</th>\n",
       "      <td>281258961</td>\n",
       "      <td>受不了了三个小时！！！墨迹的必须快进</td>\n",
       "      <td>3793023</td>\n",
       "      <td>熊阿姨</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-08-12 01:15:05</td>\n",
       "      <td>1140</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189</th>\n",
       "      <td>289611171</td>\n",
       "      <td>对于“韩寒一样的印度电影”，我表示鸭梨很大。这电影不建议看</td>\n",
       "      <td>3793023</td>\n",
       "      <td>韩寒</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-09-03 15:48:32</td>\n",
       "      <td>950</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>288733790</td>\n",
       "      <td>本年度最烂的片。。。被严重欺骗</td>\n",
       "      <td>3793023</td>\n",
       "      <td>[已注销]</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-09-01 00:01:45</td>\n",
       "      <td>686</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>303745238</td>\n",
       "      <td>恶俗 平庸 无病呻吟。男主角表情非常贱，地球上的星星里面恶心了我一次，现在又恶心我一次。</td>\n",
       "      <td>3793023</td>\n",
       "      <td>马克爱马克</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-10-13 19:50:13</td>\n",
       "      <td>477</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>213010725</td>\n",
       "      <td>无聊且伪善。</td>\n",
       "      <td>1291828</td>\n",
       "      <td>碎岁</td>\n",
       "      <td>1</td>\n",
       "      <td>2010-02-05 11:32:50</td>\n",
       "      <td>194</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249109</th>\n",
       "      <td>567205789</td>\n",
       "      <td>有些人浅薄，有些人金玉其外败絮其中，但是总有一天，你会遇到一个绚丽的人，她让你觉得你以前遇到...</td>\n",
       "      <td>3319755</td>\n",
       "      <td>过期少女</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 15:36:58</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249115</th>\n",
       "      <td>567137778</td>\n",
       "      <td>清新纯纯！！！</td>\n",
       "      <td>3319755</td>\n",
       "      <td>olivia-ahaha</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 12:42:36</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249116</th>\n",
       "      <td>567133426</td>\n",
       "      <td>一个非常简单、清新美好的初恋故事，一个在最美好的年岁发生的最美好的故事，片名取得不错，怦然心...</td>\n",
       "      <td>3319755</td>\n",
       "      <td>豆子糕</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 12:32:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249117</th>\n",
       "      <td>567111064</td>\n",
       "      <td>纯纯的爱~</td>\n",
       "      <td>3319755</td>\n",
       "      <td>Miss.52HZ</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 11:27:34</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249137</th>\n",
       "      <td>5917964</td>\n",
       "      <td>还是经典，有机会以后要看高清的</td>\n",
       "      <td>1291552</td>\n",
       "      <td>他们都叫我豆子</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-01-17 15:40:33</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249157</th>\n",
       "      <td>610779808</td>\n",
       "      <td>我不信上帝</td>\n",
       "      <td>1929463</td>\n",
       "      <td>霍比特人</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-12-02 15:11:30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249175</th>\n",
       "      <td>863375455</td>\n",
       "      <td>昨天看完很激动说了一堆，今天没什么想说的了，是人类中心主义者的又一次胜利，但还是仰观宇宙之大...</td>\n",
       "      <td>1889243</td>\n",
       "      <td>秋熙</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-11-16 17:28:43</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249195</th>\n",
       "      <td>56205854</td>\n",
       "      <td>好看～找不出文字来形容，只好剽窃了～</td>\n",
       "      <td>1291583</td>\n",
       "      <td>Shirley_Manson</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-08-25 14:59:30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249211</th>\n",
       "      <td>520856067</td>\n",
       "      <td>全凭二叔一句话。。。</td>\n",
       "      <td>1291583</td>\n",
       "      <td>Messy</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-04-15 23:58:34</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249217</th>\n",
       "      <td>485813066</td>\n",
       "      <td>這是唯一宮崎駿系列中最不喜歡的片子 我也不知道爲什麽不喜歡 就是沒有好感</td>\n",
       "      <td>1291583</td>\n",
       "      <td>vanon</td>\n",
       "      <td>2</td>\n",
       "      <td>2012-01-23 03:50:18</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249220</th>\n",
       "      <td>852554366</td>\n",
       "      <td>马特达萌是如何通过心理测试的！</td>\n",
       "      <td>1889243</td>\n",
       "      <td>乱骂</td>\n",
       "      <td>2</td>\n",
       "      <td>2015-04-11 20:43:27</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249222</th>\n",
       "      <td>863460517</td>\n",
       "      <td>诺兰粉丝类似王自如吧</td>\n",
       "      <td>1889243</td>\n",
       "      <td>nilao88</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-11-16 21:30:06</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249223</th>\n",
       "      <td>862217706</td>\n",
       "      <td>大黑石和HAL9000合体，然后又分裂成两块，一个萌一个酷。（橙色的麦糠拿嘿让人好出戏，饱和...</td>\n",
       "      <td>1889243</td>\n",
       "      <td>friendbeast</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-11-12 23:01:59</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249240</th>\n",
       "      <td>545949045</td>\n",
       "      <td>买了牒，还没看，应该不错</td>\n",
       "      <td>1291858</td>\n",
       "      <td>zero</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-06-19 12:09:36</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249252</th>\n",
       "      <td>567285085</td>\n",
       "      <td>当初看他找了很长时间，姜文是内地最喜欢的导演</td>\n",
       "      <td>1291858</td>\n",
       "      <td>Evan</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 18:57:54</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249253</th>\n",
       "      <td>567242149</td>\n",
       "      <td>以一个不一样的视角表现了人性的不同层面。</td>\n",
       "      <td>1291858</td>\n",
       "      <td>farguo</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 17:09:03</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249258</th>\n",
       "      <td>567066377</td>\n",
       "      <td>历史真的不是那么简单的</td>\n",
       "      <td>1291858</td>\n",
       "      <td>无爱无忧</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 07:55:43</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249260</th>\n",
       "      <td>520010817</td>\n",
       "      <td>故事节奏略缓，对悲伤的渲染力度不够。。也许是期望太高了吧</td>\n",
       "      <td>1292365</td>\n",
       "      <td>梦暖寒</td>\n",
       "      <td>2</td>\n",
       "      <td>2012-04-14 00:24:31</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249290</th>\n",
       "      <td>277273536</td>\n",
       "      <td>ICS</td>\n",
       "      <td>1293839</td>\n",
       "      <td>M</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-08-01 11:53:31</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249295</th>\n",
       "      <td>243294370</td>\n",
       "      <td>英语老师课上放的 很棒~给高三晚自习带来一丝温情</td>\n",
       "      <td>1293839</td>\n",
       "      <td>欢斗士星矢</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-04-22 19:49:01</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249300</th>\n",
       "      <td>468594218</td>\n",
       "      <td>十六年了，才终于看了。一开头就发现台词都是自己生活用语啊，囧</td>\n",
       "      <td>1299398</td>\n",
       "      <td>まるい</td>\n",
       "      <td>0</td>\n",
       "      <td>2011-12-12 18:24:47</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249312</th>\n",
       "      <td>14980431</td>\n",
       "      <td>背台词呀背台词....</td>\n",
       "      <td>1299398</td>\n",
       "      <td>renee</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-05-30 18:12:06</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249337</th>\n",
       "      <td>457376978</td>\n",
       "      <td>字幕太糟糕了，不幸毁了这部不错的电影。</td>\n",
       "      <td>1293350</td>\n",
       "      <td>冰淇淋的滋味</td>\n",
       "      <td>0</td>\n",
       "      <td>2011-11-14 05:06:18</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249403</th>\n",
       "      <td>613215960</td>\n",
       "      <td>好久没睡这么香了。。</td>\n",
       "      <td>1929463</td>\n",
       "      <td>YK</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-12-08 11:58:30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249434</th>\n",
       "      <td>263751312</td>\n",
       "      <td>伊安•麦克莱恩</td>\n",
       "      <td>1291552</td>\n",
       "      <td>肉抖抖</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-06-23 21:56:01</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249479</th>\n",
       "      <td>160119389</td>\n",
       "      <td>12话唠儿</td>\n",
       "      <td>1293182</td>\n",
       "      <td>qi</td>\n",
       "      <td>1</td>\n",
       "      <td>2009-09-19 19:50:01</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249480</th>\n",
       "      <td>289442418</td>\n",
       "      <td>巨没劲几乎看睡</td>\n",
       "      <td>2131459</td>\n",
       "      <td>第六天大萌王</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-09-03 00:31:29</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249506</th>\n",
       "      <td>9410453</td>\n",
       "      <td>初中时候真的极端喜欢这片子</td>\n",
       "      <td>1291561</td>\n",
       "      <td>喜上眉梢邪王子</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-01-19 21:12:20</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249517</th>\n",
       "      <td>39337285</td>\n",
       "      <td>不喜欢</td>\n",
       "      <td>1291561</td>\n",
       "      <td>正在看牡丹</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-05-03 20:09:40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249520</th>\n",
       "      <td>473180347</td>\n",
       "      <td>当年第一次看的时候是爸爸很激动的拿了三张碟子来看。</td>\n",
       "      <td>1292722</td>\n",
       "      <td>Okey-dokey</td>\n",
       "      <td>0</td>\n",
       "      <td>2011-12-24 13:41:14</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>12381 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        comment_id                                            content  \\\n",
       "9         34253734                                      真的不喜欢，不好看，没感觉   \n",
       "18         6040147                                         有那么好吗？？？？？   \n",
       "42        39174583                                好看在哪里了？竟然这么多人喜欢，奇怪。   \n",
       "46        39349806                                 俊男靓女也无法阻止它迈向闷片的步伐。   \n",
       "55        54777342  没有什么惊天动地的,翻天覆地的,纯纯的,轻轻的,却让眼睛忍不住一下就酸了。TONG跟MEW的...   \n",
       "59        38237626  ——太多的爱，即使会让我们犯了错；但比起未曾为爱做过任何事好太多了，不是吗？\\r\\n——如果...   \n",
       "60         9350578                太扯了，两个男人，在一起生活了几百年，没有其他伴侣，竟然什么都没发生？   \n",
       "63       513057700  小时候看过一部电影，主角是个基佬，基佬找了个男人，但那个男人是个罗莉控。他和萝莉暗算了基佬，...   \n",
       "69        47300430                        暴殄天物啊！攥着三个超级大帅哥就拍成了这样？看不懂~~   \n",
       "75         2099700                                          没看完就看不下去了   \n",
       "82       301775590  三个小孩子太烦了，情感转变毫无逻辑（不是两秒钟的“张大眼睛作无辜状”就是可爱了的）。整个情节...   \n",
       "83       322762449                    为啥我很不喜欢哪三个看似可怜的小孩？很不喜欢的那种很不喜欢……   \n",
       "89       177776822                            内容低质化，笑点成人化，对手弱智化，背景莫名化   \n",
       "136      234105420                                       我们的眼泪到底有多廉价？   \n",
       "137      268881468                             谁想到这么狗血。。。有种不停听人讲道理的感觉   \n",
       "140        1897756                                              侮辱钢琴。   \n",
       "141       83714566  纯傻逼！！！多稳妥的故事让伪善者托纳托雷拍成了纯傻逼！！！多少细节都散发着矫揉造作的腥臭！！...   \n",
       "146       34253873                                           不喜欢，没共鸣。   \n",
       "148       12062592                  也就音乐还算可以，Tim Roth太猥琐，不适合演这种文绉绉的角色   \n",
       "151        1467680  giuseppe tornatore的三部曲之一------陆地？陆地对我来说是一艘太大的船...   \n",
       "153      587048396  这么多年我还是没有看完这部高分片……从一开始的故事带出演员表演方式我就知道不是我的菜 越往下...   \n",
       "154      110362924                                               不伦不类   \n",
       "156       22839898                                 令人感动的宅男，让我想起了树上的男爵   \n",
       "170      325148038                                    25-30岁待业青年的精神寄托   \n",
       "172        2573153                                     看了不下20遍，彻底看伤了。   \n",
       "187      281258961                                 受不了了三个小时！！！墨迹的必须快进   \n",
       "189      289611171                      对于“韩寒一样的印度电影”，我表示鸭梨很大。这电影不建议看   \n",
       "192      288733790                                    本年度最烂的片。。。被严重欺骗   \n",
       "196      303745238       恶俗 平庸 无病呻吟。男主角表情非常贱，地球上的星星里面恶心了我一次，现在又恶心我一次。   \n",
       "212      213010725                                             无聊且伪善。   \n",
       "...            ...                                                ...   \n",
       "249109   567205789  有些人浅薄，有些人金玉其外败絮其中，但是总有一天，你会遇到一个绚丽的人，她让你觉得你以前遇到...   \n",
       "249115   567137778                                            清新纯纯！！！   \n",
       "249116   567133426  一个非常简单、清新美好的初恋故事，一个在最美好的年岁发生的最美好的故事，片名取得不错，怦然心...   \n",
       "249117   567111064                                              纯纯的爱~   \n",
       "249137     5917964                                    还是经典，有机会以后要看高清的   \n",
       "249157   610779808                                              我不信上帝   \n",
       "249175   863375455  昨天看完很激动说了一堆，今天没什么想说的了，是人类中心主义者的又一次胜利，但还是仰观宇宙之大...   \n",
       "249195    56205854                                 好看～找不出文字来形容，只好剽窃了～   \n",
       "249211   520856067                                         全凭二叔一句话。。。   \n",
       "249217   485813066               這是唯一宮崎駿系列中最不喜歡的片子 我也不知道爲什麽不喜歡 就是沒有好感   \n",
       "249220   852554366                                    马特达萌是如何通过心理测试的！   \n",
       "249222   863460517                                         诺兰粉丝类似王自如吧   \n",
       "249223   862217706  大黑石和HAL9000合体，然后又分裂成两块，一个萌一个酷。（橙色的麦糠拿嘿让人好出戏，饱和...   \n",
       "249240   545949045                                       买了牒，还没看，应该不错   \n",
       "249252   567285085                             当初看他找了很长时间，姜文是内地最喜欢的导演   \n",
       "249253   567242149                               以一个不一样的视角表现了人性的不同层面。   \n",
       "249258   567066377                                        历史真的不是那么简单的   \n",
       "249260   520010817                       故事节奏略缓，对悲伤的渲染力度不够。。也许是期望太高了吧   \n",
       "249290   277273536                                                ICS   \n",
       "249295   243294370                           英语老师课上放的 很棒~给高三晚自习带来一丝温情   \n",
       "249300   468594218                     十六年了，才终于看了。一开头就发现台词都是自己生活用语啊，囧   \n",
       "249312    14980431                                        背台词呀背台词....   \n",
       "249337   457376978                                字幕太糟糕了，不幸毁了这部不错的电影。   \n",
       "249403   613215960                                         好久没睡这么香了。。   \n",
       "249434   263751312                                            伊安•麦克莱恩   \n",
       "249479   160119389                                              12话唠儿   \n",
       "249480   289442418                                            巨没劲几乎看睡   \n",
       "249506     9410453                                      初中时候真的极端喜欢这片子   \n",
       "249517    39337285                                                不喜欢   \n",
       "249520   473180347                          当年第一次看的时候是爸爸很激动的拿了三张碟子来看。   \n",
       "\n",
       "        movie_id          people  star                time  useful_num  label  \n",
       "9        1292052            九尾黑猫     2 2008-03-19 00:32:02        1107      0  \n",
       "18       1292052            我不绝望     2 2006-10-05 22:11:30         391      0  \n",
       "42       2365260             女魔头     2 2008-05-02 15:53:09         482      0  \n",
       "46       2365260           飞天PP猪     2 2008-05-03 21:31:59         252      0  \n",
       "55       2365260       尼桑，都是尼桑的错     0 2008-08-17 09:12:54         105      0  \n",
       "59       2365260             逍遥兽     0 2008-04-24 22:37:45          63      0  \n",
       "60       1299327          harumi     0 2007-01-18 18:20:00        2140      0  \n",
       "63       1299327             陆秋槎     0 2012-03-26 23:26:29         786      0  \n",
       "69       1299327             战国客     2 2008-07-01 13:59:14         260      0  \n",
       "75       1299327           nadja     2 2006-03-25 18:35:26          97      0  \n",
       "82       3287562         bayer04     2 2010-10-08 04:19:29         666      0  \n",
       "83       3287562              老六     2 2010-12-05 01:58:15         585      0  \n",
       "89       3287562         小偷|隐忍沉定     1 2010-12-07 11:48:46         233      0  \n",
       "136      3792799              比多     2 2010-04-24 23:04:26         140      0  \n",
       "137      3792799            九尾黑猫     1 2010-07-09 19:48:44         142      0  \n",
       "140      1292001            荔枝超人     1 2006-03-12 20:57:42        2112      0  \n",
       "141      1292001             撕撕撕     2 2009-05-23 15:19:33        1512      0  \n",
       "146      1292001            九尾黑猫     2 2008-03-19 00:34:26         849      0  \n",
       "148      1292001              大宸     2 2007-11-08 17:51:25         525      0  \n",
       "151      1292001             独行狼     0 2006-02-11 13:44:40         556      0  \n",
       "153      1292001          Cactus     1 2012-10-03 21:04:54         339      0  \n",
       "154      1292001            周萨萨。     2 2009-04-06 11:50:53         196      0  \n",
       "156      1292001            小波福娃     0 2007-10-29 18:18:06         146      0  \n",
       "170      1292213          十七只猫和鱼     0 2010-12-11 10:07:01        1458      0  \n",
       "172      1292213             林愈静     0 2006-04-22 13:09:37         946      0  \n",
       "187      3793023             熊阿姨     2 2010-08-12 01:15:05        1140      0  \n",
       "189      3793023              韩寒     2 2010-09-03 15:48:32         950      0  \n",
       "192      3793023           [已注销]     2 2010-09-01 00:01:45         686      0  \n",
       "196      3793023           马克爱马克     2 2010-10-13 19:50:13         477      0  \n",
       "212      1291828              碎岁     1 2010-02-05 11:32:50         194      0  \n",
       "...          ...             ...   ...                 ...         ...    ...  \n",
       "249109   3319755            过期少女     0 2012-08-12 15:36:58           0      0  \n",
       "249115   3319755    olivia-ahaha     0 2012-08-12 12:42:36           0      0  \n",
       "249116   3319755             豆子糕     0 2012-08-12 12:32:00           0      0  \n",
       "249117   3319755       Miss.52HZ     0 2012-08-12 11:27:34           0      0  \n",
       "249137   1291552         他们都叫我豆子     0 2008-01-17 15:40:33           0      0  \n",
       "249157   1929463            霍比特人     0 2012-12-02 15:11:30           0      0  \n",
       "249175   1889243              秋熙     0 2014-11-16 17:28:43           0      0  \n",
       "249195   1291583  Shirley_Manson     0 2008-08-25 14:59:30           0      0  \n",
       "249211   1291583           Messy     0 2012-04-15 23:58:34           0      0  \n",
       "249217   1291583           vanon     2 2012-01-23 03:50:18           0      0  \n",
       "249220   1889243              乱骂     2 2015-04-11 20:43:27           0      0  \n",
       "249222   1889243         nilao88     0 2014-11-16 21:30:06           2      0  \n",
       "249223   1889243     friendbeast     0 2014-11-12 23:01:59           2      0  \n",
       "249240   1291858            zero     0 2012-06-19 12:09:36           0      0  \n",
       "249252   1291858            Evan     0 2012-08-12 18:57:54           0      0  \n",
       "249253   1291858          farguo     0 2012-08-12 17:09:03           0      0  \n",
       "249258   1291858            无爱无忧     0 2012-08-12 07:55:43           0      0  \n",
       "249260   1292365             梦暖寒     2 2012-04-14 00:24:31           0      0  \n",
       "249290   1293839               M     0 2010-08-01 11:53:31           0      0  \n",
       "249295   1293839           欢斗士星矢     0 2010-04-22 19:49:01           0      0  \n",
       "249300   1299398             まるい     0 2011-12-12 18:24:47           0      0  \n",
       "249312   1299398           renee     0 2007-05-30 18:12:06           0      0  \n",
       "249337   1293350          冰淇淋的滋味     0 2011-11-14 05:06:18           0      0  \n",
       "249403   1929463              YK     0 2012-12-08 11:58:30           0      0  \n",
       "249434   1291552             肉抖抖     0 2010-06-23 21:56:01           0      0  \n",
       "249479   1293182              qi     1 2009-09-19 19:50:01           0      0  \n",
       "249480   2131459          第六天大萌王     2 2010-09-03 00:31:29           0      0  \n",
       "249506   1291561         喜上眉梢邪王子     0 2007-01-19 21:12:20           0      0  \n",
       "249517   1291561           正在看牡丹     2 2008-05-03 20:09:40           0      0  \n",
       "249520   1292722      Okey-dokey     0 2011-12-24 13:41:14           0      0  \n",
       "\n",
       "[12381 rows x 8 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>comment_id</th>\n",
       "      <th>content</th>\n",
       "      <th>movie_id</th>\n",
       "      <th>people</th>\n",
       "      <th>star</th>\n",
       "      <th>time</th>\n",
       "      <th>useful_num</th>\n",
       "      <th>label</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>34253734</td>\n",
       "      <td>真的不喜欢，不好看，没感觉</td>\n",
       "      <td>1292052</td>\n",
       "      <td>九尾黑猫</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-03-19 00:32:02</td>\n",
       "      <td>1107</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>18</th>\n",
       "      <td>6040147</td>\n",
       "      <td>有那么好吗？？？？？</td>\n",
       "      <td>1292052</td>\n",
       "      <td>我不绝望</td>\n",
       "      <td>2</td>\n",
       "      <td>2006-10-05 22:11:30</td>\n",
       "      <td>391</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>42</th>\n",
       "      <td>39174583</td>\n",
       "      <td>好看在哪里了？竟然这么多人喜欢，奇怪。</td>\n",
       "      <td>2365260</td>\n",
       "      <td>女魔头</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-05-02 15:53:09</td>\n",
       "      <td>482</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>46</th>\n",
       "      <td>39349806</td>\n",
       "      <td>俊男靓女也无法阻止它迈向闷片的步伐。</td>\n",
       "      <td>2365260</td>\n",
       "      <td>飞天PP猪</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-05-03 21:31:59</td>\n",
       "      <td>252</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>55</th>\n",
       "      <td>54777342</td>\n",
       "      <td>没有什么惊天动地的,翻天覆地的,纯纯的,轻轻的,却让眼睛忍不住一下就酸了。TONG跟MEW的...</td>\n",
       "      <td>2365260</td>\n",
       "      <td>尼桑，都是尼桑的错</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-08-17 09:12:54</td>\n",
       "      <td>105</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>59</th>\n",
       "      <td>38237626</td>\n",
       "      <td>——太多的爱，即使会让我们犯了错；但比起未曾为爱做过任何事好太多了，不是吗？\\r\\n——如果...</td>\n",
       "      <td>2365260</td>\n",
       "      <td>逍遥兽</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-04-24 22:37:45</td>\n",
       "      <td>63</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>60</th>\n",
       "      <td>9350578</td>\n",
       "      <td>太扯了，两个男人，在一起生活了几百年，没有其他伴侣，竟然什么都没发生？</td>\n",
       "      <td>1299327</td>\n",
       "      <td>harumi</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-01-18 18:20:00</td>\n",
       "      <td>2140</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>63</th>\n",
       "      <td>513057700</td>\n",
       "      <td>小时候看过一部电影，主角是个基佬，基佬找了个男人，但那个男人是个罗莉控。他和萝莉暗算了基佬，...</td>\n",
       "      <td>1299327</td>\n",
       "      <td>陆秋槎</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-03-26 23:26:29</td>\n",
       "      <td>786</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>69</th>\n",
       "      <td>47300430</td>\n",
       "      <td>暴殄天物啊！攥着三个超级大帅哥就拍成了这样？看不懂~~</td>\n",
       "      <td>1299327</td>\n",
       "      <td>战国客</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-07-01 13:59:14</td>\n",
       "      <td>260</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75</th>\n",
       "      <td>2099700</td>\n",
       "      <td>没看完就看不下去了</td>\n",
       "      <td>1299327</td>\n",
       "      <td>nadja</td>\n",
       "      <td>2</td>\n",
       "      <td>2006-03-25 18:35:26</td>\n",
       "      <td>97</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>82</th>\n",
       "      <td>301775590</td>\n",
       "      <td>三个小孩子太烦了，情感转变毫无逻辑（不是两秒钟的“张大眼睛作无辜状”就是可爱了的）。整个情节...</td>\n",
       "      <td>3287562</td>\n",
       "      <td>bayer04</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-10-08 04:19:29</td>\n",
       "      <td>666</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>83</th>\n",
       "      <td>322762449</td>\n",
       "      <td>为啥我很不喜欢哪三个看似可怜的小孩？很不喜欢的那种很不喜欢……</td>\n",
       "      <td>3287562</td>\n",
       "      <td>老六</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-12-05 01:58:15</td>\n",
       "      <td>585</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>89</th>\n",
       "      <td>177776822</td>\n",
       "      <td>内容低质化，笑点成人化，对手弱智化，背景莫名化</td>\n",
       "      <td>3287562</td>\n",
       "      <td>小偷|隐忍沉定</td>\n",
       "      <td>1</td>\n",
       "      <td>2010-12-07 11:48:46</td>\n",
       "      <td>233</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>136</th>\n",
       "      <td>234105420</td>\n",
       "      <td>我们的眼泪到底有多廉价？</td>\n",
       "      <td>3792799</td>\n",
       "      <td>比多</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-04-24 23:04:26</td>\n",
       "      <td>140</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>137</th>\n",
       "      <td>268881468</td>\n",
       "      <td>谁想到这么狗血。。。有种不停听人讲道理的感觉</td>\n",
       "      <td>3792799</td>\n",
       "      <td>九尾黑猫</td>\n",
       "      <td>1</td>\n",
       "      <td>2010-07-09 19:48:44</td>\n",
       "      <td>142</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>140</th>\n",
       "      <td>1897756</td>\n",
       "      <td>侮辱钢琴。</td>\n",
       "      <td>1292001</td>\n",
       "      <td>荔枝超人</td>\n",
       "      <td>1</td>\n",
       "      <td>2006-03-12 20:57:42</td>\n",
       "      <td>2112</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>141</th>\n",
       "      <td>83714566</td>\n",
       "      <td>纯傻逼！！！多稳妥的故事让伪善者托纳托雷拍成了纯傻逼！！！多少细节都散发着矫揉造作的腥臭！！...</td>\n",
       "      <td>1292001</td>\n",
       "      <td>撕撕撕</td>\n",
       "      <td>2</td>\n",
       "      <td>2009-05-23 15:19:33</td>\n",
       "      <td>1512</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>146</th>\n",
       "      <td>34253873</td>\n",
       "      <td>不喜欢，没共鸣。</td>\n",
       "      <td>1292001</td>\n",
       "      <td>九尾黑猫</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-03-19 00:34:26</td>\n",
       "      <td>849</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>148</th>\n",
       "      <td>12062592</td>\n",
       "      <td>也就音乐还算可以，Tim Roth太猥琐，不适合演这种文绉绉的角色</td>\n",
       "      <td>1292001</td>\n",
       "      <td>大宸</td>\n",
       "      <td>2</td>\n",
       "      <td>2007-11-08 17:51:25</td>\n",
       "      <td>525</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>151</th>\n",
       "      <td>1467680</td>\n",
       "      <td>giuseppe tornatore的三部曲之一------陆地？陆地对我来说是一艘太大的船...</td>\n",
       "      <td>1292001</td>\n",
       "      <td>独行狼</td>\n",
       "      <td>0</td>\n",
       "      <td>2006-02-11 13:44:40</td>\n",
       "      <td>556</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>153</th>\n",
       "      <td>587048396</td>\n",
       "      <td>这么多年我还是没有看完这部高分片……从一开始的故事带出演员表演方式我就知道不是我的菜 越往下...</td>\n",
       "      <td>1292001</td>\n",
       "      <td>Cactus</td>\n",
       "      <td>1</td>\n",
       "      <td>2012-10-03 21:04:54</td>\n",
       "      <td>339</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>154</th>\n",
       "      <td>110362924</td>\n",
       "      <td>不伦不类</td>\n",
       "      <td>1292001</td>\n",
       "      <td>周萨萨。</td>\n",
       "      <td>2</td>\n",
       "      <td>2009-04-06 11:50:53</td>\n",
       "      <td>196</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>156</th>\n",
       "      <td>22839898</td>\n",
       "      <td>令人感动的宅男，让我想起了树上的男爵</td>\n",
       "      <td>1292001</td>\n",
       "      <td>小波福娃</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-10-29 18:18:06</td>\n",
       "      <td>146</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>170</th>\n",
       "      <td>325148038</td>\n",
       "      <td>25-30岁待业青年的精神寄托</td>\n",
       "      <td>1292213</td>\n",
       "      <td>十七只猫和鱼</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-12-11 10:07:01</td>\n",
       "      <td>1458</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>172</th>\n",
       "      <td>2573153</td>\n",
       "      <td>看了不下20遍，彻底看伤了。</td>\n",
       "      <td>1292213</td>\n",
       "      <td>林愈静</td>\n",
       "      <td>0</td>\n",
       "      <td>2006-04-22 13:09:37</td>\n",
       "      <td>946</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>187</th>\n",
       "      <td>281258961</td>\n",
       "      <td>受不了了三个小时！！！墨迹的必须快进</td>\n",
       "      <td>3793023</td>\n",
       "      <td>熊阿姨</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-08-12 01:15:05</td>\n",
       "      <td>1140</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>189</th>\n",
       "      <td>289611171</td>\n",
       "      <td>对于“韩寒一样的印度电影”，我表示鸭梨很大。这电影不建议看</td>\n",
       "      <td>3793023</td>\n",
       "      <td>韩寒</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-09-03 15:48:32</td>\n",
       "      <td>950</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>192</th>\n",
       "      <td>288733790</td>\n",
       "      <td>本年度最烂的片。。。被严重欺骗</td>\n",
       "      <td>3793023</td>\n",
       "      <td>[已注销]</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-09-01 00:01:45</td>\n",
       "      <td>686</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>196</th>\n",
       "      <td>303745238</td>\n",
       "      <td>恶俗 平庸 无病呻吟。男主角表情非常贱，地球上的星星里面恶心了我一次，现在又恶心我一次。</td>\n",
       "      <td>3793023</td>\n",
       "      <td>马克爱马克</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-10-13 19:50:13</td>\n",
       "      <td>477</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>212</th>\n",
       "      <td>213010725</td>\n",
       "      <td>无聊且伪善。</td>\n",
       "      <td>1291828</td>\n",
       "      <td>碎岁</td>\n",
       "      <td>1</td>\n",
       "      <td>2010-02-05 11:32:50</td>\n",
       "      <td>194</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249109</th>\n",
       "      <td>567205789</td>\n",
       "      <td>有些人浅薄，有些人金玉其外败絮其中，但是总有一天，你会遇到一个绚丽的人，她让你觉得你以前遇到...</td>\n",
       "      <td>3319755</td>\n",
       "      <td>过期少女</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 15:36:58</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249115</th>\n",
       "      <td>567137778</td>\n",
       "      <td>清新纯纯！！！</td>\n",
       "      <td>3319755</td>\n",
       "      <td>olivia-ahaha</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 12:42:36</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249116</th>\n",
       "      <td>567133426</td>\n",
       "      <td>一个非常简单、清新美好的初恋故事，一个在最美好的年岁发生的最美好的故事，片名取得不错，怦然心...</td>\n",
       "      <td>3319755</td>\n",
       "      <td>豆子糕</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 12:32:00</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249117</th>\n",
       "      <td>567111064</td>\n",
       "      <td>纯纯的爱~</td>\n",
       "      <td>3319755</td>\n",
       "      <td>Miss.52HZ</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 11:27:34</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249137</th>\n",
       "      <td>5917964</td>\n",
       "      <td>还是经典，有机会以后要看高清的</td>\n",
       "      <td>1291552</td>\n",
       "      <td>他们都叫我豆子</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-01-17 15:40:33</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249157</th>\n",
       "      <td>610779808</td>\n",
       "      <td>我不信上帝</td>\n",
       "      <td>1929463</td>\n",
       "      <td>霍比特人</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-12-02 15:11:30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249175</th>\n",
       "      <td>863375455</td>\n",
       "      <td>昨天看完很激动说了一堆，今天没什么想说的了，是人类中心主义者的又一次胜利，但还是仰观宇宙之大...</td>\n",
       "      <td>1889243</td>\n",
       "      <td>秋熙</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-11-16 17:28:43</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249195</th>\n",
       "      <td>56205854</td>\n",
       "      <td>好看～找不出文字来形容，只好剽窃了～</td>\n",
       "      <td>1291583</td>\n",
       "      <td>Shirley_Manson</td>\n",
       "      <td>0</td>\n",
       "      <td>2008-08-25 14:59:30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249211</th>\n",
       "      <td>520856067</td>\n",
       "      <td>全凭二叔一句话。。。</td>\n",
       "      <td>1291583</td>\n",
       "      <td>Messy</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-04-15 23:58:34</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249217</th>\n",
       "      <td>485813066</td>\n",
       "      <td>這是唯一宮崎駿系列中最不喜歡的片子 我也不知道爲什麽不喜歡 就是沒有好感</td>\n",
       "      <td>1291583</td>\n",
       "      <td>vanon</td>\n",
       "      <td>2</td>\n",
       "      <td>2012-01-23 03:50:18</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249220</th>\n",
       "      <td>852554366</td>\n",
       "      <td>马特达萌是如何通过心理测试的！</td>\n",
       "      <td>1889243</td>\n",
       "      <td>乱骂</td>\n",
       "      <td>2</td>\n",
       "      <td>2015-04-11 20:43:27</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249222</th>\n",
       "      <td>863460517</td>\n",
       "      <td>诺兰粉丝类似王自如吧</td>\n",
       "      <td>1889243</td>\n",
       "      <td>nilao88</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-11-16 21:30:06</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249223</th>\n",
       "      <td>862217706</td>\n",
       "      <td>大黑石和HAL9000合体，然后又分裂成两块，一个萌一个酷。（橙色的麦糠拿嘿让人好出戏，饱和...</td>\n",
       "      <td>1889243</td>\n",
       "      <td>friendbeast</td>\n",
       "      <td>0</td>\n",
       "      <td>2014-11-12 23:01:59</td>\n",
       "      <td>2</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249240</th>\n",
       "      <td>545949045</td>\n",
       "      <td>买了牒，还没看，应该不错</td>\n",
       "      <td>1291858</td>\n",
       "      <td>zero</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-06-19 12:09:36</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249252</th>\n",
       "      <td>567285085</td>\n",
       "      <td>当初看他找了很长时间，姜文是内地最喜欢的导演</td>\n",
       "      <td>1291858</td>\n",
       "      <td>Evan</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 18:57:54</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249253</th>\n",
       "      <td>567242149</td>\n",
       "      <td>以一个不一样的视角表现了人性的不同层面。</td>\n",
       "      <td>1291858</td>\n",
       "      <td>farguo</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 17:09:03</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249258</th>\n",
       "      <td>567066377</td>\n",
       "      <td>历史真的不是那么简单的</td>\n",
       "      <td>1291858</td>\n",
       "      <td>无爱无忧</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-08-12 07:55:43</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249260</th>\n",
       "      <td>520010817</td>\n",
       "      <td>故事节奏略缓，对悲伤的渲染力度不够。。也许是期望太高了吧</td>\n",
       "      <td>1292365</td>\n",
       "      <td>梦暖寒</td>\n",
       "      <td>2</td>\n",
       "      <td>2012-04-14 00:24:31</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249290</th>\n",
       "      <td>277273536</td>\n",
       "      <td>ICS</td>\n",
       "      <td>1293839</td>\n",
       "      <td>M</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-08-01 11:53:31</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249295</th>\n",
       "      <td>243294370</td>\n",
       "      <td>英语老师课上放的 很棒~给高三晚自习带来一丝温情</td>\n",
       "      <td>1293839</td>\n",
       "      <td>欢斗士星矢</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-04-22 19:49:01</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249300</th>\n",
       "      <td>468594218</td>\n",
       "      <td>十六年了，才终于看了。一开头就发现台词都是自己生活用语啊，囧</td>\n",
       "      <td>1299398</td>\n",
       "      <td>まるい</td>\n",
       "      <td>0</td>\n",
       "      <td>2011-12-12 18:24:47</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249312</th>\n",
       "      <td>14980431</td>\n",
       "      <td>背台词呀背台词....</td>\n",
       "      <td>1299398</td>\n",
       "      <td>renee</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-05-30 18:12:06</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249337</th>\n",
       "      <td>457376978</td>\n",
       "      <td>字幕太糟糕了，不幸毁了这部不错的电影。</td>\n",
       "      <td>1293350</td>\n",
       "      <td>冰淇淋的滋味</td>\n",
       "      <td>0</td>\n",
       "      <td>2011-11-14 05:06:18</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249403</th>\n",
       "      <td>613215960</td>\n",
       "      <td>好久没睡这么香了。。</td>\n",
       "      <td>1929463</td>\n",
       "      <td>YK</td>\n",
       "      <td>0</td>\n",
       "      <td>2012-12-08 11:58:30</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249434</th>\n",
       "      <td>263751312</td>\n",
       "      <td>伊安•麦克莱恩</td>\n",
       "      <td>1291552</td>\n",
       "      <td>肉抖抖</td>\n",
       "      <td>0</td>\n",
       "      <td>2010-06-23 21:56:01</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249479</th>\n",
       "      <td>160119389</td>\n",
       "      <td>12话唠儿</td>\n",
       "      <td>1293182</td>\n",
       "      <td>qi</td>\n",
       "      <td>1</td>\n",
       "      <td>2009-09-19 19:50:01</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249480</th>\n",
       "      <td>289442418</td>\n",
       "      <td>巨没劲几乎看睡</td>\n",
       "      <td>2131459</td>\n",
       "      <td>第六天大萌王</td>\n",
       "      <td>2</td>\n",
       "      <td>2010-09-03 00:31:29</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249506</th>\n",
       "      <td>9410453</td>\n",
       "      <td>初中时候真的极端喜欢这片子</td>\n",
       "      <td>1291561</td>\n",
       "      <td>喜上眉梢邪王子</td>\n",
       "      <td>0</td>\n",
       "      <td>2007-01-19 21:12:20</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249517</th>\n",
       "      <td>39337285</td>\n",
       "      <td>不喜欢</td>\n",
       "      <td>1291561</td>\n",
       "      <td>正在看牡丹</td>\n",
       "      <td>2</td>\n",
       "      <td>2008-05-03 20:09:40</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>249520</th>\n",
       "      <td>473180347</td>\n",
       "      <td>当年第一次看的时候是爸爸很激动的拿了三张碟子来看。</td>\n",
       "      <td>1292722</td>\n",
       "      <td>Okey-dokey</td>\n",
       "      <td>0</td>\n",
       "      <td>2011-12-24 13:41:14</td>\n",
       "      <td>0</td>\n",
       "      <td>0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>12381 rows × 8 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "        comment_id                                            content  \\\n",
       "9         34253734                                      真的不喜欢，不好看，没感觉   \n",
       "18         6040147                                         有那么好吗？？？？？   \n",
       "42        39174583                                好看在哪里了？竟然这么多人喜欢，奇怪。   \n",
       "46        39349806                                 俊男靓女也无法阻止它迈向闷片的步伐。   \n",
       "55        54777342  没有什么惊天动地的,翻天覆地的,纯纯的,轻轻的,却让眼睛忍不住一下就酸了。TONG跟MEW的...   \n",
       "59        38237626  ——太多的爱，即使会让我们犯了错；但比起未曾为爱做过任何事好太多了，不是吗？\\r\\n——如果...   \n",
       "60         9350578                太扯了，两个男人，在一起生活了几百年，没有其他伴侣，竟然什么都没发生？   \n",
       "63       513057700  小时候看过一部电影，主角是个基佬，基佬找了个男人，但那个男人是个罗莉控。他和萝莉暗算了基佬，...   \n",
       "69        47300430                        暴殄天物啊！攥着三个超级大帅哥就拍成了这样？看不懂~~   \n",
       "75         2099700                                          没看完就看不下去了   \n",
       "82       301775590  三个小孩子太烦了，情感转变毫无逻辑（不是两秒钟的“张大眼睛作无辜状”就是可爱了的）。整个情节...   \n",
       "83       322762449                    为啥我很不喜欢哪三个看似可怜的小孩？很不喜欢的那种很不喜欢……   \n",
       "89       177776822                            内容低质化，笑点成人化，对手弱智化，背景莫名化   \n",
       "136      234105420                                       我们的眼泪到底有多廉价？   \n",
       "137      268881468                             谁想到这么狗血。。。有种不停听人讲道理的感觉   \n",
       "140        1897756                                              侮辱钢琴。   \n",
       "141       83714566  纯傻逼！！！多稳妥的故事让伪善者托纳托雷拍成了纯傻逼！！！多少细节都散发着矫揉造作的腥臭！！...   \n",
       "146       34253873                                           不喜欢，没共鸣。   \n",
       "148       12062592                  也就音乐还算可以，Tim Roth太猥琐，不适合演这种文绉绉的角色   \n",
       "151        1467680  giuseppe tornatore的三部曲之一------陆地？陆地对我来说是一艘太大的船...   \n",
       "153      587048396  这么多年我还是没有看完这部高分片……从一开始的故事带出演员表演方式我就知道不是我的菜 越往下...   \n",
       "154      110362924                                               不伦不类   \n",
       "156       22839898                                 令人感动的宅男，让我想起了树上的男爵   \n",
       "170      325148038                                    25-30岁待业青年的精神寄托   \n",
       "172        2573153                                     看了不下20遍，彻底看伤了。   \n",
       "187      281258961                                 受不了了三个小时！！！墨迹的必须快进   \n",
       "189      289611171                      对于“韩寒一样的印度电影”，我表示鸭梨很大。这电影不建议看   \n",
       "192      288733790                                    本年度最烂的片。。。被严重欺骗   \n",
       "196      303745238       恶俗 平庸 无病呻吟。男主角表情非常贱，地球上的星星里面恶心了我一次，现在又恶心我一次。   \n",
       "212      213010725                                             无聊且伪善。   \n",
       "...            ...                                                ...   \n",
       "249109   567205789  有些人浅薄，有些人金玉其外败絮其中，但是总有一天，你会遇到一个绚丽的人，她让你觉得你以前遇到...   \n",
       "249115   567137778                                            清新纯纯！！！   \n",
       "249116   567133426  一个非常简单、清新美好的初恋故事，一个在最美好的年岁发生的最美好的故事，片名取得不错，怦然心...   \n",
       "249117   567111064                                              纯纯的爱~   \n",
       "249137     5917964                                    还是经典，有机会以后要看高清的   \n",
       "249157   610779808                                              我不信上帝   \n",
       "249175   863375455  昨天看完很激动说了一堆，今天没什么想说的了，是人类中心主义者的又一次胜利，但还是仰观宇宙之大...   \n",
       "249195    56205854                                 好看～找不出文字来形容，只好剽窃了～   \n",
       "249211   520856067                                         全凭二叔一句话。。。   \n",
       "249217   485813066               這是唯一宮崎駿系列中最不喜歡的片子 我也不知道爲什麽不喜歡 就是沒有好感   \n",
       "249220   852554366                                    马特达萌是如何通过心理测试的！   \n",
       "249222   863460517                                         诺兰粉丝类似王自如吧   \n",
       "249223   862217706  大黑石和HAL9000合体，然后又分裂成两块，一个萌一个酷。（橙色的麦糠拿嘿让人好出戏，饱和...   \n",
       "249240   545949045                                       买了牒，还没看，应该不错   \n",
       "249252   567285085                             当初看他找了很长时间，姜文是内地最喜欢的导演   \n",
       "249253   567242149                               以一个不一样的视角表现了人性的不同层面。   \n",
       "249258   567066377                                        历史真的不是那么简单的   \n",
       "249260   520010817                       故事节奏略缓，对悲伤的渲染力度不够。。也许是期望太高了吧   \n",
       "249290   277273536                                                ICS   \n",
       "249295   243294370                           英语老师课上放的 很棒~给高三晚自习带来一丝温情   \n",
       "249300   468594218                     十六年了，才终于看了。一开头就发现台词都是自己生活用语啊，囧   \n",
       "249312    14980431                                        背台词呀背台词....   \n",
       "249337   457376978                                字幕太糟糕了，不幸毁了这部不错的电影。   \n",
       "249403   613215960                                         好久没睡这么香了。。   \n",
       "249434   263751312                                            伊安•麦克莱恩   \n",
       "249479   160119389                                              12话唠儿   \n",
       "249480   289442418                                            巨没劲几乎看睡   \n",
       "249506     9410453                                      初中时候真的极端喜欢这片子   \n",
       "249517    39337285                                                不喜欢   \n",
       "249520   473180347                          当年第一次看的时候是爸爸很激动的拿了三张碟子来看。   \n",
       "\n",
       "        movie_id          people  star                time  useful_num  label  \n",
       "9        1292052            九尾黑猫     2 2008-03-19 00:32:02        1107      0  \n",
       "18       1292052            我不绝望     2 2006-10-05 22:11:30         391      0  \n",
       "42       2365260             女魔头     2 2008-05-02 15:53:09         482      0  \n",
       "46       2365260           飞天PP猪     2 2008-05-03 21:31:59         252      0  \n",
       "55       2365260       尼桑，都是尼桑的错     0 2008-08-17 09:12:54         105      0  \n",
       "59       2365260             逍遥兽     0 2008-04-24 22:37:45          63      0  \n",
       "60       1299327          harumi     0 2007-01-18 18:20:00        2140      0  \n",
       "63       1299327             陆秋槎     0 2012-03-26 23:26:29         786      0  \n",
       "69       1299327             战国客     2 2008-07-01 13:59:14         260      0  \n",
       "75       1299327           nadja     2 2006-03-25 18:35:26          97      0  \n",
       "82       3287562         bayer04     2 2010-10-08 04:19:29         666      0  \n",
       "83       3287562              老六     2 2010-12-05 01:58:15         585      0  \n",
       "89       3287562         小偷|隐忍沉定     1 2010-12-07 11:48:46         233      0  \n",
       "136      3792799              比多     2 2010-04-24 23:04:26         140      0  \n",
       "137      3792799            九尾黑猫     1 2010-07-09 19:48:44         142      0  \n",
       "140      1292001            荔枝超人     1 2006-03-12 20:57:42        2112      0  \n",
       "141      1292001             撕撕撕     2 2009-05-23 15:19:33        1512      0  \n",
       "146      1292001            九尾黑猫     2 2008-03-19 00:34:26         849      0  \n",
       "148      1292001              大宸     2 2007-11-08 17:51:25         525      0  \n",
       "151      1292001             独行狼     0 2006-02-11 13:44:40         556      0  \n",
       "153      1292001          Cactus     1 2012-10-03 21:04:54         339      0  \n",
       "154      1292001            周萨萨。     2 2009-04-06 11:50:53         196      0  \n",
       "156      1292001            小波福娃     0 2007-10-29 18:18:06         146      0  \n",
       "170      1292213          十七只猫和鱼     0 2010-12-11 10:07:01        1458      0  \n",
       "172      1292213             林愈静     0 2006-04-22 13:09:37         946      0  \n",
       "187      3793023             熊阿姨     2 2010-08-12 01:15:05        1140      0  \n",
       "189      3793023              韩寒     2 2010-09-03 15:48:32         950      0  \n",
       "192      3793023           [已注销]     2 2010-09-01 00:01:45         686      0  \n",
       "196      3793023           马克爱马克     2 2010-10-13 19:50:13         477      0  \n",
       "212      1291828              碎岁     1 2010-02-05 11:32:50         194      0  \n",
       "...          ...             ...   ...                 ...         ...    ...  \n",
       "249109   3319755            过期少女     0 2012-08-12 15:36:58           0      0  \n",
       "249115   3319755    olivia-ahaha     0 2012-08-12 12:42:36           0      0  \n",
       "249116   3319755             豆子糕     0 2012-08-12 12:32:00           0      0  \n",
       "249117   3319755       Miss.52HZ     0 2012-08-12 11:27:34           0      0  \n",
       "249137   1291552         他们都叫我豆子     0 2008-01-17 15:40:33           0      0  \n",
       "249157   1929463            霍比特人     0 2012-12-02 15:11:30           0      0  \n",
       "249175   1889243              秋熙     0 2014-11-16 17:28:43           0      0  \n",
       "249195   1291583  Shirley_Manson     0 2008-08-25 14:59:30           0      0  \n",
       "249211   1291583           Messy     0 2012-04-15 23:58:34           0      0  \n",
       "249217   1291583           vanon     2 2012-01-23 03:50:18           0      0  \n",
       "249220   1889243              乱骂     2 2015-04-11 20:43:27           0      0  \n",
       "249222   1889243         nilao88     0 2014-11-16 21:30:06           2      0  \n",
       "249223   1889243     friendbeast     0 2014-11-12 23:01:59           2      0  \n",
       "249240   1291858            zero     0 2012-06-19 12:09:36           0      0  \n",
       "249252   1291858            Evan     0 2012-08-12 18:57:54           0      0  \n",
       "249253   1291858          farguo     0 2012-08-12 17:09:03           0      0  \n",
       "249258   1291858            无爱无忧     0 2012-08-12 07:55:43           0      0  \n",
       "249260   1292365             梦暖寒     2 2012-04-14 00:24:31           0      0  \n",
       "249290   1293839               M     0 2010-08-01 11:53:31           0      0  \n",
       "249295   1293839           欢斗士星矢     0 2010-04-22 19:49:01           0      0  \n",
       "249300   1299398             まるい     0 2011-12-12 18:24:47           0      0  \n",
       "249312   1299398           renee     0 2007-05-30 18:12:06           0      0  \n",
       "249337   1293350          冰淇淋的滋味     0 2011-11-14 05:06:18           0      0  \n",
       "249403   1929463              YK     0 2012-12-08 11:58:30           0      0  \n",
       "249434   1291552             肉抖抖     0 2010-06-23 21:56:01           0      0  \n",
       "249479   1293182              qi     1 2009-09-19 19:50:01           0      0  \n",
       "249480   2131459          第六天大萌王     2 2010-09-03 00:31:29           0      0  \n",
       "249506   1291561         喜上眉梢邪王子     0 2007-01-19 21:12:20           0      0  \n",
       "249517   1291561           正在看牡丹     2 2008-05-03 20:09:40           0      0  \n",
       "249520   1292722      Okey-dokey     0 2011-12-24 13:41:14           0      0  \n",
       "\n",
       "[12381 rows x 8 columns]"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_com_0"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-20-f7ebd8069fdd>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m      8\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'axes'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mgrid\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      9\u001b[0m \u001b[0mmatplotlib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mrc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'axes'\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mfacecolor\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'white'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 10\u001b[0;31m \u001b[0msns\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mdistplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdata_com\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtime\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mapply\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;32mlambda\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m:\u001b[0m \u001b[0mint\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0myear\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m+\u001b[0m\u001b[0mfloat\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mmonth\u001b[0m\u001b[0;34m/\u001b[0m\u001b[0;36m12.0\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mbins\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;36m100\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mkde\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mrug\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mTrue\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     11\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mxlabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'time'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     12\u001b[0m \u001b[0mplt\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mylabel\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'Number of short_comment'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/seaborn/distributions.py\u001b[0m in \u001b[0;36mdistplot\u001b[0;34m(a, bins, hist, kde, rug, fit, hist_kws, kde_kws, rug_kws, fit_kws, color, vertical, norm_hist, axlabel, label, ax)\u001b[0m\n\u001b[1;32m    226\u001b[0m         \u001b[0mrug_color\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrug_kws\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpop\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"color\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    227\u001b[0m         \u001b[0maxis\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m\"y\"\u001b[0m \u001b[0;32mif\u001b[0m \u001b[0mvertical\u001b[0m \u001b[0;32melse\u001b[0m \u001b[0;34m\"x\"\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 228\u001b[0;31m         \u001b[0mrugplot\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ma\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0maxis\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0maxis\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0max\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mrug_color\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mrug_kws\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    229\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mrug_color\u001b[0m \u001b[0;34m!=\u001b[0m \u001b[0mcolor\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    230\u001b[0m             \u001b[0mrug_kws\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m\"color\"\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mrug_color\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/seaborn/distributions.py\u001b[0m in \u001b[0;36mrugplot\u001b[0;34m(a, height, axis, ax, **kwargs)\u001b[0m\n\u001b[1;32m    636\u001b[0m     \u001b[0mkwargs\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msetdefault\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m\"linewidth\"\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m1\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    637\u001b[0m     \u001b[0;32mfor\u001b[0m \u001b[0mpt\u001b[0m \u001b[0;32min\u001b[0m \u001b[0ma\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 638\u001b[0;31m         \u001b[0mfunc\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpt\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;36m0\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mheight\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    639\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    640\u001b[0m     \u001b[0;32mreturn\u001b[0m \u001b[0max\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/matplotlib/axes/_axes.py\u001b[0m in \u001b[0;36maxvline\u001b[0;34m(self, x, ymin, ymax, **kwargs)\u001b[0m\n\u001b[1;32m    791\u001b[0m         \u001b[0ml\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mmlines\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mLine2D\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mx\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0mymin\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mymax\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mtransform\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mtrans\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m**\u001b[0m\u001b[0mkwargs\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    792\u001b[0m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0madd_line\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0ml\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m--> 793\u001b[0;31m         \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mautoscale_view\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mscalex\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mscalex\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mscaley\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m    794\u001b[0m         \u001b[0;32mreturn\u001b[0m \u001b[0ml\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m    795\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/matplotlib/axes/_base.py\u001b[0m in \u001b[0;36mautoscale_view\u001b[0;34m(self, tight, scalex, scaley)\u001b[0m\n\u001b[1;32m   2259\u001b[0m         \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0muse_sticky_edges\u001b[0m \u001b[0;32mand\u001b[0m \u001b[0;34m(\u001b[0m\u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_xmargin\u001b[0m \u001b[0;32mor\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0m_ymargin\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2260\u001b[0m             \u001b[0mstickies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0martist\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0msticky_edges\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0martist\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_children\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m-> 2261\u001b[0;31m             \u001b[0mx_stickies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msticky\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mx\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msticky\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mstickies\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m   2262\u001b[0m             \u001b[0my_stickies\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0msum\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0msticky\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0my\u001b[0m \u001b[0;32mfor\u001b[0m \u001b[0msticky\u001b[0m \u001b[0;32min\u001b[0m \u001b[0mstickies\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m[\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m   2263\u001b[0m             \u001b[0;32mif\u001b[0m \u001b[0mself\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_xscale\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlower\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m \u001b[0;34m==\u001b[0m \u001b[0;34m'log'\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "from __future__ import division, print_function\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import seaborn as sns\n",
    "matplotlib.rc('figure', figsize = (14, 7))\n",
    "matplotlib.rc('font', size = 14)\n",
    "matplotlib.rc('axes', grid = False)\n",
    "matplotlib.rc('axes', facecolor = 'white')\n",
    "sns.distplot(data_com.time.apply(lambda x: int(x.year)+float(x.month/12.0)), bins=100, kde=False, rug=True)\n",
    "plt.xlabel('time')\n",
    "plt.ylabel('Number of short_comment')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'plot2y' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-1-c9dfa7cf34d7>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m plot2y(x_data = data_com.time.apply(lambda x: int(x.year)+float(x.month/12.0))\n\u001b[0m\u001b[1;32m      2\u001b[0m            \u001b[0;34m,\u001b[0m \u001b[0mx_label\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'time'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      3\u001b[0m            \u001b[0;34m,\u001b[0m \u001b[0mtype1\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'scatter'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m            \u001b[0;34m,\u001b[0m \u001b[0my1_data\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdata_com_X\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'useful_num'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      5\u001b[0m            \u001b[0;34m,\u001b[0m \u001b[0my1_color\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;34m'#539caf'\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'plot2y' is not defined"
     ]
    }
   ],
   "source": [
    "plot2y(x_data = data_com.time.apply(lambda x: int(x.year)+float(x.month/12.0))\n",
    "           , x_label = 'time'\n",
    "           , type1 = 'scatter'\n",
    "           , y1_data = data_com_X['useful_num']\n",
    "           , y1_color = '#539caf'\n",
    "           , y1_label = 'useful_num'\n",
    "           , type2 = 'scatter'\n",
    "           , y2_data = data_com_X['star']\n",
    "           , y2_color = '#7663b0'\n",
    "           , y2_label = 'star'\n",
    "           , title = 'Useful number and star over Time')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "import warnings\n",
    "warnings.filterwarnings(\"ignore\")\n",
    "import jieba   # 分词包\n",
    "import numpy\n",
    "import codecs\n",
    "import pandas as pd\n",
    "import matplotlib.pyplot as plt\n",
    "%matplotlib inline\n",
    "import matplotlib\n",
    "matplotlib.rcParams['figure.figsize']=(10.0,5.0)\n",
    "from wordcloud import WordCloud # 词云包\n",
    "\n",
    "content_X = data_com_X.content.dropna().values.tolist()\n",
    "# 导入、分词\n",
    "segment=[]\n",
    "for line in content_X: \n",
    "    try:\n",
    "        segs = jieba.lcut(line) # jiaba.lcut()   \n",
    "        for seg in segs:\n",
    "            if len(seg)>1 and seg!='\\r\\n':\n",
    "                segment.append(seg)\n",
    "    except:\n",
    "        print(line)\n",
    "        continue\n",
    "        \n",
    "# 去停用词\n",
    "words_df = pd.DataFrame({'segment':segment})\n",
    "stopwords = pd.read_csv(\"../stopwords.txt\" \n",
    "                      ,index_col=False\n",
    "                      ,quoting=3\n",
    "                      ,sep=\"\\t\"\n",
    "                      ,names=['stopword']\n",
    "                      ,encoding='utf-8') # quoting=3 全不引用    \n",
    "#stopwords.head()\n",
    "words_df=words_df[~words_df.segment.isin(stopwords.stopword)]\n",
    "\n",
    "# 统计词频\n",
    "words_stat = words_df.groupby(by=['segment'])['segment'].agg({\"计数\":np.size})\n",
    "words_stat=words_stat.reset_index().sort_values(by=[\"计数\"],ascending=False)\n",
    "#words_stat.head()\n",
    "\n",
    "# 词云\n",
    "wordcloud = WordCloud(font_path=\"../simhei.ttf\"\n",
    "                      ,background_color=\"white\"\n",
    "                      ,max_font_size=80)\n",
    "word_frequence={x[0]:x[1] for x in words_stat.head(1000).values}\n",
    "wordcloud=wordcloud.fit_words(word_frequence)\n",
    "plt.imshow(wordcloud)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# Deeplearning"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1    237131\n",
       "0     12381\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "text/plain": [
       "1    237131\n",
       "0     12381\n",
       "Name: label, dtype: int64"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_com.label.value_counts()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_com_1 = data_com[data_com.label == 1]\n",
    "data_com_0 = data_com[data_com.label == 0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [],
   "source": [
    "import jieba \n",
    "import pandas as pd \n",
    "import random\n",
    "\n",
    "stopwords=pd.read_csv(\"../stopwords.txt\",index_col=False,quoting=3\n",
    "                      ,sep=\"\\t\",names=['stopword'], encoding='utf-8')\n",
    "stopwords=stopwords['stopword'].values\n",
    "\n",
    "def preprocess_text(content_lines,sentences,category): \n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append((\" \".join(segs), category))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {},
   "outputs": [],
   "source": [
    "sentences=[]\n",
    "preprocess_text(data_com_1.content.dropna().values.tolist() ,sentences ,'like')\n",
    "preprocess_text(data_com_0.content.dropna().values.tolist() ,sentences ,'nlike')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "Building prefix dict from the default dictionary ...\n",
      "Loading model from cache /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/jieba.cache\n",
      "Loading model cost 1.479 seconds.\n",
      "Prefix dict has been built succesfully.\n"
     ]
    },
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Ar u free?Ar u really free?\n"
     ]
    }
   ],
   "source": [
    "n=0\n",
    "while n <20:\n",
    "    preprocess_text(data_com_0.content.dropna().values.tolist() ,sentences ,'nlike')\n",
    "    n +=1\n",
    "    print('Now n=',n)\n",
    "random.shuffle(sentences)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.model_selection import train_test_split\n",
    "x,y=zip(*sentences)\n",
    "train_data,test_data,train_target,test_target=train_test_split(x, y, random_state=1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-17-88886caaa267>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtensorflow\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayers\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mencoders\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     14\u001b[0m \u001b[0mlearn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlearn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     29\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdeprecated\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     30\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdistributions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 31\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mfactorization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     32\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mframework\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     33\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgraph_editor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/factorization/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     21\u001b[0m \u001b[0;31m# pylint: disable=wildcard-import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclustering_ops\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     23\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization_ops\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgmm\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/factorization/python/ops/clustering_ops.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     40\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     41\u001b[0m _clustering_ops = loader.load_op_library(\n\u001b[0;32m---> 42\u001b[0;31m     resource_loader.get_path_to_datafile('_clustering_ops.so'))\n\u001b[0m\u001b[1;32m     43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     44\u001b[0m \u001b[0;31m# Euclidean distance between vectors U and V is defined as ||U - V||_F which is\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/util/loader.py\u001b[0m in \u001b[0;36mload_op_library\u001b[0;34m(path)\u001b[0m\n\u001b[1;32m     53\u001b[0m       \u001b[0;32mreturn\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     54\u001b[0m   \u001b[0mpath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresource_loader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_path_to_datafile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m   \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mload_library\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_op_library\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     56\u001b[0m   \u001b[0;32massert\u001b[0m \u001b[0mret\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Could not load %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     57\u001b[0m   \u001b[0;32mreturn\u001b[0m \u001b[0mret\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/framework/load_library.py\u001b[0m in \u001b[0;36mload_op_library\u001b[0;34m(library_filename)\u001b[0m\n\u001b[1;32m     55\u001b[0m   \u001b[0mstatus\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpy_tf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_NewStatus\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     56\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 57\u001b[0;31m   \u001b[0mlib_handle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpy_tf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_LoadLibrary\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlibrary_filename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstatus\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     58\u001b[0m   \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     59\u001b[0m     \u001b[0merror_code\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpy_tf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetCode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatus\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    },
    {
     "ename": "KeyboardInterrupt",
     "evalue": "",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m                         Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-17-88886caaa267>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     10\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0msklearn\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mmetrics\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     11\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mtensorflow\u001b[0m \u001b[0;32mas\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 12\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayers\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlayers\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mencoders\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     13\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     14\u001b[0m \u001b[0mlearn\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mtf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mlearn\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     29\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdeprecated\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     30\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mdistributions\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 31\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mfactorization\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     32\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mframework\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     33\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0mgraph_editor\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/factorization/__init__.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     20\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     21\u001b[0m \u001b[0;31m# pylint: disable=wildcard-import\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 22\u001b[0;31m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mclustering_ops\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     23\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization_ops\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     24\u001b[0m \u001b[0;32mfrom\u001b[0m \u001b[0mtensorflow\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mcontrib\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mfactorization\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpython\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mops\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mgmm\u001b[0m \u001b[0;32mimport\u001b[0m \u001b[0;34m*\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/factorization/python/ops/clustering_ops.py\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[1;32m     40\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     41\u001b[0m _clustering_ops = loader.load_op_library(\n\u001b[0;32m---> 42\u001b[0;31m     resource_loader.get_path_to_datafile('_clustering_ops.so'))\n\u001b[0m\u001b[1;32m     43\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     44\u001b[0m \u001b[0;31m# Euclidean distance between vectors U and V is defined as ||U - V||_F which is\u001b[0m\u001b[0;34m\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/contrib/util/loader.py\u001b[0m in \u001b[0;36mload_op_library\u001b[0;34m(path)\u001b[0m\n\u001b[1;32m     53\u001b[0m       \u001b[0;32mreturn\u001b[0m \u001b[0;32mNone\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     54\u001b[0m   \u001b[0mpath\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mresource_loader\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mget_path_to_datafile\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 55\u001b[0;31m   \u001b[0mret\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mload_library\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mload_op_library\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mpath\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     56\u001b[0m   \u001b[0;32massert\u001b[0m \u001b[0mret\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Could not load %s'\u001b[0m \u001b[0;34m%\u001b[0m \u001b[0mpath\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     57\u001b[0m   \u001b[0;32mreturn\u001b[0m \u001b[0mret\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;32m/usr/local/lib/python3.5/site-packages/tensorflow/python/framework/load_library.py\u001b[0m in \u001b[0;36mload_op_library\u001b[0;34m(library_filename)\u001b[0m\n\u001b[1;32m     55\u001b[0m   \u001b[0mstatus\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpy_tf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_NewStatus\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     56\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m---> 57\u001b[0;31m   \u001b[0mlib_handle\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpy_tf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_LoadLibrary\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlibrary_filename\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mstatus\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m     58\u001b[0m   \u001b[0;32mtry\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m     59\u001b[0m     \u001b[0merror_code\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mpy_tf\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mTF_GetCode\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mstatus\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mKeyboardInterrupt\u001b[0m: "
     ]
    }
   ],
   "source": [
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import argparse\n",
    "import sys\n",
    "\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "import tensorflow as tf\n",
    "from tensorflow.contrib.layers.python.layers import encoders\n",
    "\n",
    "learn = tf.contrib.learn\n",
    "\n",
    "FALGS = None\n",
    "MAX_DOCUMENT_LENGTH=15\n",
    "MIN_WORD_FREQUENCE=1\n",
    "EMBEDDING_SIZE=50\n",
    "global n_words\n",
    "\n",
    "global n_words\n",
    "# 处理词汇\n",
    "vocab_processor = learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH\n",
    "                                                          ,min_frequency=MIN_WORD_FREQUENCE) \n",
    "x_train = np.array(list(vocab_processor.fit_transform(train_data)))\n",
    "x_test = np.array(list(vocab_processor.transform(test_data)))\n",
    "n_words=len(vocab_processor.vocabulary_) \n",
    "print('Total words:%d'%n_words)\n",
    "\n",
    "cate_dic={'like':1,'nlike':0}\n",
    "y_train = pd.Series(train_target).apply(lambda x:cate_dic[x] , train_target)\n",
    "y_test = pd.Series(test_target).apply(lambda x:cate_dic[x] , test_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def rnn_model(features,target): \n",
    "    \"\"\"\n",
    "    用RNN模型（这里用的是GRU）完成文本分类\n",
    "    \"\"\"\n",
    "    # Convert indexes of words into embeddings.\n",
    "    # This creates embeddings matrix of [n_words, EMBEDDING_SIZE] and then\n",
    "    # maps word indexes of the sequence into [batch_size,sequence_length,\n",
    "    # EMBEDDING_SIZE].\n",
    "    word_vectors = tf.contrib.layers.embed_sequence(features\n",
    "                                                    ,vocab_size=n_words\n",
    "                                                    ,embed_dim=EMBEDDING_SIZE\n",
    "                                                    ,scope='words')\n",
    "    # Split into list of embedding per word, while removing doc length dim。\n",
    "    # word_list results to be a list of tensors [batch_size,EMBEDDING_SIZE].\n",
    "    word_list = tf.unstack(word_vectors, axis=1)\n",
    "    \n",
    "    # Create a Gated Recurrent Unit cell with hidden size of EMBEDDING_SIZE.\n",
    "    cell = tf.contrib.rnn.GRUCell(EMBEDDING_SIZE)\n",
    "    \n",
    "    # Create an unrolled Recurrent Neural Networks to length of\n",
    "    # MAX_DOCUMENT_LENGTH and passes word_list as inputs for each unit.\n",
    "    _, encoding = tf.contrib.rnn.static_rnn(cell, word_list, dtype=tf.float32)\n",
    "    \n",
    "    # Given encoding of RNN, take encoding of last step (e.g hidden size of the\n",
    "    # neural network of last step) and pass it as features for logistic\n",
    "    # regression over output classes.\n",
    "    target = tf.one_hot(target, 15, 1, 0)\n",
    "    logits = tf.contrib.layers.fully_connected(encoding, 15, activation_fn=None)\n",
    "    loss = tf.contrib.losses.softmax_cross_entropy(logits, target)\n",
    "    \n",
    "    # Create a training op.\n",
    "    train_op = tf.contrib.layers.optimize_loss(\n",
    "            loss,\n",
    "            tf.contrib.framework.get_global_step(),\n",
    "            optimizer='Adam',\n",
    "            learning_rate=0.01)\n",
    "    \n",
    "    return ({\n",
    "            'class': tf.argmax(logits, 1),\n",
    "            'prob': tf.nn.softmax(logits)\n",
    "    }, loss, train_op)\n",
    "\n",
    "\n",
    "model_fn = rnn_model \n",
    "classifier=learn.SKCompat(learn.Estimator(model_fn=model_fn))\n",
    "\n",
    "#Train and predict\n",
    "classifier.fit(x_train,y_train,steps=1000) \n",
    "y_predicted=classifier.predict(x_test)['class']\n",
    "score=metrics.accuracy_score(y_test,y_predicted)\n",
    "print('Accuracy:{0:f}'.format(score))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'vocab_processor' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-19-cbbe2f54a038>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mpred\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'好精彩的电影！'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-18-a62c5ce0f799>\u001b[0m in \u001b[0;36mpred\u001b[0;34m(commment)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0mpreprocess_text\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcommment\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m,\u001b[0m\u001b[0msentences\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'unknown'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msentences\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0mx_tt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mclassifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_tt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'class'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'vocab_processor' is not defined"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'vocab_processor' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-19-cbbe2f54a038>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mpred\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m'好精彩的电影！'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m",
      "\u001b[0;32m<ipython-input-18-a62c5ce0f799>\u001b[0m in \u001b[0;36mpred\u001b[0;34m(commment)\u001b[0m\n\u001b[1;32m      3\u001b[0m     \u001b[0mpreprocess_text\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mcommment\u001b[0m\u001b[0;34m]\u001b[0m \u001b[0;34m,\u001b[0m\u001b[0msentences\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'unknown'\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      4\u001b[0m     \u001b[0mx\u001b[0m\u001b[0;34m,\u001b[0m\u001b[0my\u001b[0m\u001b[0;34m=\u001b[0m\u001b[0mzip\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m*\u001b[0m\u001b[0msentences\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0;32m----> 5\u001b[0;31m     \u001b[0mx_tt\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mnp\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0marray\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mlist\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mvocab_processor\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mtransform\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0mx\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      6\u001b[0m \u001b[0;34m\u001b[0m\u001b[0m\n\u001b[1;32m      7\u001b[0m     \u001b[0;32mif\u001b[0m \u001b[0mclassifier\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mpredict\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mx_tt\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;34m'class'\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m[\u001b[0m\u001b[0;36m0\u001b[0m\u001b[0;34m]\u001b[0m\u001b[0;34m:\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'vocab_processor' is not defined"
     ]
    }
   ],
   "source": [
    "def pred(commment):\n",
    "    sentences=[]\n",
    "    preprocess_text([commment] ,sentences, 'unknown')\n",
    "    x,y=zip(*sentences)\n",
    "    x_tt = np.array(list(vocab_processor.transform([x[0]])))\n",
    "    \n",
    "    if classifier.predict(x_tt)['class'][0]:\n",
    "        print('like')\n",
    "    else:\n",
    "        print('nlike')\n",
    "pred('好精彩的电影！')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "pred('烂片啊！')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1040"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(Xpeople_url)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {},
   "outputs": [],
   "source": [
    "Xpeople_url = data_com[data_com.movie_id == 1292052].people_url.values.tolist()\n",
    "np.savetxt('../douban_movie/bin/X_people_url.out', Xpeople_url, fmt='%s')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1096,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "ls: ./douban_movie/data/movie_people.json: No such file or directory\n"
     ]
    }
   ],
   "source": [
    "#people_url = data_com.people_url.unique().tolist()\n",
    "#np.savetxt('./douban_movie/bin/people_url.out', people_url, fmt='%s')\n",
    "!ls ./douban_movie/data/movie_people.json\n",
    "#urllist = np.loadtxt('./douban_movie/bin/people_url.out', dtype='|S').tolist()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1098,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "movie_comment100.json  movie_comment225.json  movie_people15000.json\n",
      "movie_comment120.json  movie_comment250.json  movie_people20000.json\n",
      "movie_comment140.json  movie_comment40.json   movie_people25000.json\n",
      "movie_comment160.json  movie_comment60.json   movie_people30000.json\n",
      "movie_comment180.json  movie_comment80.json   movie_people35000.json\n",
      "movie_comment20.json   movie_item.json        movie_people40000.json\n",
      "movie_comment200.json  movie_people10000.json movie_people5000.json\n"
     ]
    }
   ],
   "source": [
    "!ls ../douban_movie/data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 160,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(26321, 4)"
      ]
     },
     "execution_count": 160,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "import pandas as pd\n",
    "import numpy as np\n",
    "import json\n",
    "import re\n",
    "# 短评人数据\n",
    "movie_people_file = ['../douban_movie/data/movie_people%s.json' %j for j in [ i for i in range(5000,45000,5000)] ]\n",
    "peo = []\n",
    "for f in movie_people_file:\n",
    "    lines = open(f, 'rb').readlines()\n",
    "    peo.extend([json.loads(elem.decode(\"utf-8\")) for elem in lines])\n",
    "data_peo = pd.DataFrame(peo)\n",
    "data_peo.shape\n",
    "# 去掉空值\n",
    "data_peo = data_peo[~data_peo.friend.apply(lambda x: not (x[:])) \\\n",
    "         & ~data_peo.be_attention.apply(lambda x: not (x[:])) \\\n",
    "        & ~data_peo.location.apply(lambda x: not (x[:])) \\\n",
    "        &  ~data_peo.introduction.apply(lambda x: not (x[:])) ]\n",
    "\n",
    "data_peo['friend'] = data_peo.friend.apply(lambda x: int(str(x)[4:-2]) )\n",
    "data_peo['be_attention'] = data_peo.be_attention.apply(lambda x: int(re.findall(r\"被(\\d+)人\", str(x))[0]) )\n",
    "data_peo['location'] = data_peo.location.apply(lambda x: x[0])\n",
    "data_peo.head()\n",
    "data_peo.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 161,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>be_attention</th>\n",
       "      <th>friend</th>\n",
       "      <th>introduction</th>\n",
       "      <th>location</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1350</td>\n",
       "      <td>376</td>\n",
       "      <td>[假如可以带粉笔进入迷宫，以纯蓝\\r, 标记每一处通往灾祸的岔口：“我到过这儿\\r, 必将永...</td>\n",
       "      <td>广东广州</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>774</td>\n",
       "      <td>364</td>\n",
       "      <td>[ ,  吃好吃的东西，过短命的人生,  ]</td>\n",
       "      <td>福建漳州</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>99</td>\n",
       "      <td>92</td>\n",
       "      <td>[一个出生、成长都在江南水乡的70后。]</td>\n",
       "      <td>江苏宜兴</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>1793</td>\n",
       "      <td>664</td>\n",
       "      <td>[爱与和平      , 政治立场坐标, 0.8, 文化立场坐标, -0.2, 经济立场坐标...</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>8457</td>\n",
       "      <td>1406</td>\n",
       "      <td>[个人主页：兔鼠馆, -----------------------, 互相点蜡吧，终须一别...</td>\n",
       "      <td>北京</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   be_attention  friend                                       introduction  \\\n",
       "0          1350     376  [假如可以带粉笔进入迷宫，以纯蓝\\r, 标记每一处通往灾祸的岔口：“我到过这儿\\r, 必将永...   \n",
       "2           774     364                             [ ,  吃好吃的东西，过短命的人生,  ]   \n",
       "3            99      92                               [一个出生、成长都在江南水乡的70后。]   \n",
       "4          1793     664  [爱与和平      , 政治立场坐标, 0.8, 文化立场坐标, -0.2, 经济立场坐标...   \n",
       "6          8457    1406  [个人主页：兔鼠馆, -----------------------, 互相点蜡吧，终须一别...   \n",
       "\n",
       "  location  \n",
       "0     广东广州  \n",
       "2     福建漳州  \n",
       "3     江苏宜兴  \n",
       "4       北京  \n",
       "6       北京  "
      ]
     },
     "execution_count": 161,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_peo.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 162,
   "metadata": {},
   "outputs": [],
   "source": [
    "def locaP(x):\n",
    "    prov_dic = {'黑龙江':'黑龙江省', '内蒙': '内蒙古自治区', '新疆': '新疆维吾尔自治区'\n",
    "            ,'吉林': '吉林省', '辽宁': '辽宁省', '甘肃': '甘肃省', '河北': '河北省'\n",
    "            ,'北京': '北京市', '山西': '山西省', '天津': '天津市', '陕西': '陕西省'\n",
    "            ,'宁夏': '宁夏回族自治区', '青海': '青海省', '山东': '山东省', '西藏':  '西藏自治区'\n",
    "            ,'河南': '河南省', '江苏': '江苏省', '安徽': '安徽省', '四川': '四川省'\n",
    "            ,'湖北': '湖北省', '重庆': '重庆市', '上海': '上海市', '浙江': '浙江省'\n",
    "            ,'湖南': '湖南省', '江西': '江西省', '云南': '云南省', '贵州': '贵州省'\n",
    "            ,'福建': '福建省', '广西': '广西壮族自治区', '台湾': '台湾省', '广东':  '广东省'\n",
    "            ,'香港': '香港特别行政区','澳门': '香港特别行政区', '海南': '海南省'\n",
    "               , '苏州':'江苏省','威海':'山东省','嘉兴':'浙江省','锡林浩特':'内蒙古自治区'\n",
    "               , '温州':'浙江省','肇庆': '广东省','红河':'云南省','延边':'吉林省'\n",
    "               , '衢州':'浙江省','伊宁': '新疆维吾尔自治区','遵义':'贵州省','绍兴':'浙江省'\n",
    "               , '库尔勒':'新疆维吾尔自治区','杭州':'浙江省','通化':'吉林省'}\n",
    "\n",
    "    for d in prov_dic:\n",
    "        if d in x:  return prov_dic[d]\n",
    "\n",
    "def locaC(x):        \n",
    "    country_dict = {'China':'China','United States':'United States','Hong Kong':'Hong Kong','Taiwan':'Taiwan, Province of China'\n",
    "                 ,'Japan':'Japan','Korea':'Korea, Republic of','United Kingdom':'United Kingdom','France':'France','Germany':'Germany'\n",
    "                 ,'Italy':'Italy','Spain':'Spain','India':'India','Thailand':'Thailand','Russia':'Russian Federation'\n",
    "                 ,'Iran':'Iran','Canada':'Canada','Australia':'Australia','Ireland':'Ireland','Sweden':'Sweden'\n",
    "                 ,'Brazil':'Brazil','Denmark':'Denmark','Singapore':'Singapore','Cuba':'Cuba','Iceland':'Iceland'\n",
    "                    ,'Netherlands':'Netherlands', 'Switzerland':'Switzerland','Bahamas':'Bahamas','Sierra Leone':'Sierra Leone'\n",
    "                    ,'Finland':'Finland','Czech Republic':'Czech Republic','Egypt':'Egypt','Turkey':'Turkey','Argentina':'Argentina'\n",
    "                   ,'Bolivia':'Bolivia','Norway':'Norway','Indonesia':'Indonesia','Chile':'Chile','Morocco':'Morocco','Andorra':'Andorra'\n",
    "                   ,'Senegal':'Senegal','Somalia':'Somalia','Haiti':'Haiti','Portugal':'Portugal','Togo':'Togo','New Zealand':'New Zealand'\n",
    "                   ,'Hungary':'Hungary','Bulgaria':'Bulgaria','Afghanistan':'Afghanistan','Niue':'Niue','Austria':'Austria'\n",
    "                   ,'Peru':'Peru','Greece':'Greece','Luxembourg':'Luxembourg','Greenland':'Greenland','Fiji':'Fiji','Jordan':'Jordan'\n",
    "                   ,'Reunion':'Reunion','Bhutan':'Bhutan','Barbados':'Barbados','Malaysia':'Malaysia','Ghana':'Ghana'\n",
    "                   ,'Poland':'Poland','Guinea':'Guinea','Belgium':'Belgium','Zimbabwe':'Zimbabwe','Aruba':'Aruba','Anguilla':'Anguilla'\n",
    "                   ,'Nepal':'Nepal','Latvia':'Latvia','Philippines':'Philippines','United Arab Emirates':'United Arab Emirates'\n",
    "                   ,'Saudi Arabia':'Saudi Arabia','South Africa':'South Africa','Mexico':'Mexico','Syrian':'Syrian Arab Republic'\n",
    "                   ,'Sudan':'Sudan','Iraq':'Iraq','Slovenia':'Slovenia','Tunisia':'Tunisia','Nicaragua':'Nicaragua','Kazakhstan':'Kazakhstan'\n",
    "                   ,'Bahrain':'Bahrain','Vietnam':'Viet Nam','Tuvalu':'Tuvula','Vatican City':'Vatican City State (Holy See)'\n",
    "                   ,'Wallis et Futuna':'Wallis and Futuna Islands','Tanzania':'Tanzania, United Republic of'\n",
    "                   ,'Libya':'Liby An Arab Jamahiriya','Western Sahara':'Western Sahara','Syria':'Syrian Arab Republic'\n",
    "                   ,'Faroe Islands':'Faroe Islands','Sao Tome and Principe':'Sao Tome and Principe'\n",
    "                   ,'Christmas Islands':'Christmas Islands','Costa Rica':'Costa Rica','Antarctica':'Antartica'\n",
    "                   ,'Cook Islands':'Cook Islands','Kuwait':'Kuwait','Bermuda':'Bermuda','El Salvador':'El Salvador'\n",
    "                   ,'Ethiopia':'Ethiopia','Mozambique':'Mozambique','Guyana':'Guyana','Mongolia':'Mongolia','Eritrea':'Eritrea'\n",
    "                   ,'Monaco':'Monaco','Gibraltar':'Gibralter','Yemen':'Yemen','Micronesia':'Micronesia, (Federated States of)'\n",
    "                   ,'Colombia':'Columbia','Guadeloupe':'Guadeloupe','Antigua':'Antigua & Barbuda','Caledonia':'New Caledonia'\n",
    "                   ,'Cambodia':'Cambodia','Franch Guiana':'French Guiana','Vanuatu':'Vanuatu','Puerto Rico':'Puerto Rico'\n",
    "                   ,'Belize':'Belize','Angola':'Angola','Dominica':'Dominica','Albania':'Albania','Azerbaijan':'Azerbaijan'\n",
    "                   ,'Ukraine':'Ukraine','Grenada':'Grenada','Panama':'Panama','Israel':'Israel','Guatemala':'Guatemala'\n",
    "                   ,'Belarus':'Belarus','Cameroon':'Cameroon','Jamaica':'Jamaica','Warwickshire':'United Kingdom'\n",
    "                   ,'Madagascar':'Madagascar','Mali':'Mali','Tokelau':'Tokelau','Benin':'Benin','Malta':'Malta'\n",
    "                   ,'Gabon':'Gabon','Algeria':'Algeria','Kildare':'Ireland','Ecuador':'Ecuador','Pakistan':'Pakistan'\n",
    "                   ,'Chad':'Chad','Paraguay':'Paraguay','Leicestershire':'Ireland','Estonia':'Estonia','Maldives':'Maldives'\n",
    "                   ,'Liechtenstein':'Liechtenstein','Cyprus':'Cyprus','Zambia':'Zambia','Macedonia':'Macedonia, The Former Republic of Yugoslavia'\n",
    "                   ,'Bouvet':'Bouvet Island','Uganda':'Uganda','Northern Marianas':'Northern Mariana Islands'\n",
    "                   ,'Miquelon':'St. Pierre and Miquelon','Pitcairn':'Pitcairn','Slovakia':'Slovakia','Norfolk':'Norfolk Island'\n",
    "                   ,'Lanka':'Sri Lanka','Congo':'Congo','Cocos':'Cocos (Keeling) Islands','Serbia':'Bulgaria','Croatia':'Croatia'\n",
    "                   ,'Palestinian':'Israel','Armenia':'Armenia','Saint Barthélemy':'France','Sint Maarten':'France'\n",
    "                   ,'Côte':\"Cote D'ivoire (Ivory Coast)\",'Jersey':'United Kingdom','Isle of Man':'United Kingdom'\n",
    "                   ,'Aland Islands':'Finland','Kosovo':'Yugoslavia','Montenegro':'Yugoslavia'}\n",
    "    for d in country_dict:\n",
    "        if d in x:  return country_dict[d]    \n",
    "        "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 163,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>be_attention</th>\n",
       "      <th>friend</th>\n",
       "      <th>introduction</th>\n",
       "      <th>location</th>\n",
       "      <th>province</th>\n",
       "      <th>country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>34869</th>\n",
       "      <td>91</td>\n",
       "      <td>150</td>\n",
       "      <td>[还行吧]</td>\n",
       "      <td>贵州贵阳</td>\n",
       "      <td>贵州省</td>\n",
       "      <td>China</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34870</th>\n",
       "      <td>172</td>\n",
       "      <td>229</td>\n",
       "      <td>[口头上的反消费主义者]</td>\n",
       "      <td>London, United Kingdom</td>\n",
       "      <td>oversea</td>\n",
       "      <td>United Kingdom</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34871</th>\n",
       "      <td>35966</td>\n",
       "      <td>225</td>\n",
       "      <td>[一切热衷都是爱的耗散，一种甜美的耗散。, 出版的书：, 《一起来吃早午餐》, 《假如我有一...</td>\n",
       "      <td>北京</td>\n",
       "      <td>北京市</td>\n",
       "      <td>China</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34872</th>\n",
       "      <td>683</td>\n",
       "      <td>136</td>\n",
       "      <td>[sukida是我在08年夏天看的一部电影后起的, 电影的情节我都没有印象，唯一的印象就是s...</td>\n",
       "      <td>北京</td>\n",
       "      <td>北京市</td>\n",
       "      <td>China</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>34873</th>\n",
       "      <td>6</td>\n",
       "      <td>6</td>\n",
       "      <td>[I am the captain of my soul……]</td>\n",
       "      <td>浙江杭州</td>\n",
       "      <td>浙江省</td>\n",
       "      <td>China</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "       be_attention  friend  \\\n",
       "34869            91     150   \n",
       "34870           172     229   \n",
       "34871         35966     225   \n",
       "34872           683     136   \n",
       "34873             6       6   \n",
       "\n",
       "                                            introduction  \\\n",
       "34869                                              [还行吧]   \n",
       "34870                                       [口头上的反消费主义者]   \n",
       "34871  [一切热衷都是爱的耗散，一种甜美的耗散。, 出版的书：, 《一起来吃早午餐》, 《假如我有一...   \n",
       "34872  [sukida是我在08年夏天看的一部电影后起的, 电影的情节我都没有印象，唯一的印象就是s...   \n",
       "34873                    [I am the captain of my soul……]   \n",
       "\n",
       "                     location province         country  \n",
       "34869                    贵州贵阳      贵州省           China  \n",
       "34870  London, United Kingdom  oversea  United Kingdom  \n",
       "34871                      北京      北京市           China  \n",
       "34872                      北京      北京市           China  \n",
       "34873                    浙江杭州      浙江省           China  "
      ]
     },
     "execution_count": 163,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_peo['province'] = data_peo.location.apply(locaP)\n",
    "data_peo.province.fillna('oversea', inplace = True)\n",
    "data_peo['country'] = data_peo.location.apply(lambda x : x.split(sep = ',')[-1].strip()).apply(locaC)\n",
    "data_peo.country.fillna('China', inplace = True)\n",
    "data_peo.tail()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 短评都是来自哪些国家呢？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.5/site-packages/ipykernel_launcher.py:21: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>country</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>China</td>\n",
       "      <td>22351</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>United States</td>\n",
       "      <td>1160</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>United Kingdom</td>\n",
       "      <td>354</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>Japan</td>\n",
       "      <td>302</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>Australia</td>\n",
       "      <td>271</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            index  country\n",
       "0           China    22351\n",
       "1   United States     1160\n",
       "2  United Kingdom      354\n",
       "3           Japan      302\n",
       "4       Australia      271"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nSUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10b0041d0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "temp0 = data_peo.country.value_counts().reset_index()\n",
    "df = pd.DataFrame({'NAME': temp0['index'].tolist()                    \n",
    "                   ,'NUM': (np.log1p(temp0['country'])+10).tolist()}\n",
    "                 )\n",
    "geod_world(df, 'Where the short comment comes from around world? ', )\n",
    "temp0.head()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 在中国范围内，哪些省份的短评人更活跃呢？"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "def geod_china(df, title, legend = False):\n",
    "    \"\"\"\n",
    "    temp0 = temp.reset_index()\n",
    "    df = pd.DataFrame({'NAME': temp0['index'].map(country_dict).tolist() \n",
    "                   ,'NUM': (np.log1p(temp0['数目'])*100).tolist()})\n",
    "    \"\"\"\n",
    "    import geopandas as gp\n",
    "    from matplotlib import pyplot as plt\n",
    "    %matplotlib inline\n",
    "    import matplotlib\n",
    "    import seaborn as sns\n",
    "    matplotlib.rc('figure', figsize = (14, 7))\n",
    "    matplotlib.rc('font', size = 14)\n",
    "    matplotlib.rc('axes', grid = False)\n",
    "    matplotlib.rc('axes', facecolor = 'white')\n",
    "\n",
    "    china_geod = gp.GeoDataFrame.from_file('./china_shp/bou2_4p.shp',encoding = 'gb18030')\n",
    "    data_geod = gp.GeoDataFrame(df)   # 转换格式\n",
    "    da_merge = china_geod.merge(data_geod, on = 'NAME', how = 'left') # 合并\n",
    "    sum(np.isnan(da_merge['NUM']))#\n",
    "    da_merge['NUM'][np.isnan(da_merge['NUM'])] = 14.0#填充缺失数据\n",
    "    da_merge.plot('NUM', k = 20, cmap = plt.cm.Blues,alpha= 1, legend = legend)\n",
    "    plt.title(title, fontsize=15)#设置图形标题\n",
    "    plt.gca().xaxis.set_major_locator(plt.NullLocator())#去掉x轴刻度\n",
    "    plt.gca().yaxis.set_major_locator(plt.NullLocator())#去年y轴刻度"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [
    {
     "ename": "NameError",
     "evalue": "name 'data_peo' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-2-1d6c2ecc6991>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtemp0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdata_peo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprovince\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue_counts\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m df = pd.DataFrame({'NAME': temp0['index'].tolist()                    \n\u001b[1;32m      3\u001b[0m                    ,'NUM': (np.log1p(temp0['province'])).tolist()}\n\u001b[1;32m      4\u001b[0m                  )\n\u001b[1;32m      5\u001b[0m \u001b[0mgeod_china\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Where the short comment comes from in China? '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlegend\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'data_peo' is not defined"
     ]
    },
    {
     "ename": "NameError",
     "evalue": "name 'data_peo' is not defined",
     "output_type": "error",
     "traceback": [
      "\u001b[0;31m---------------------------------------------------------------------------\u001b[0m",
      "\u001b[0;31mNameError\u001b[0m                                 Traceback (most recent call last)",
      "\u001b[0;32m<ipython-input-2-1d6c2ecc6991>\u001b[0m in \u001b[0;36m<module>\u001b[0;34m()\u001b[0m\n\u001b[0;32m----> 1\u001b[0;31m \u001b[0mtemp0\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0mdata_peo\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mprovince\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mvalue_counts\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m.\u001b[0m\u001b[0mreset_index\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n\u001b[0m\u001b[1;32m      2\u001b[0m df = pd.DataFrame({'NAME': temp0['index'].tolist()                    \n\u001b[1;32m      3\u001b[0m                    ,'NUM': (np.log1p(temp0['province'])).tolist()}\n\u001b[1;32m      4\u001b[0m                  )\n\u001b[1;32m      5\u001b[0m \u001b[0mgeod_china\u001b[0m\u001b[0;34m(\u001b[0m\u001b[0mdf\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0;34m'Where the short comment comes from in China? '\u001b[0m\u001b[0;34m,\u001b[0m \u001b[0mlegend\u001b[0m \u001b[0;34m=\u001b[0m \u001b[0;32mFalse\u001b[0m\u001b[0;34m)\u001b[0m\u001b[0;34m\u001b[0m\u001b[0m\n",
      "\u001b[0;31mNameError\u001b[0m: name 'data_peo' is not defined"
     ]
    }
   ],
   "source": [
    "temp0 = data_peo.province.value_counts().reset_index()\n",
    "df = pd.DataFrame({'NAME': temp0['index'].tolist()                    \n",
    "                   ,'NUM': (np.log1p(temp0['province'])).tolist()}\n",
    "                 )\n",
    "geod_china(df, 'Where the short comment comes from in China? ', legend = False)\n",
    "temp0.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<seaborn.axisgrid.JointGrid at 0x11322fac8>"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n776befPmsXz5curq6rjuuuv4z//8zx6P9Xg8RCIRzjjjDMLhMJdffjk7duygoqKix89l//79TJky\nhZUrV3LaaaexadMmrrrqKh566KG05y7OXBugQm0R1m/Z4Xjf+i07WLF4GqUlrv3xyCAdddRRXYN3\nZWUlu3fvZvfu3VxxxRUAhEIhjjnmGI499lh+97vf8dRTTzFq1CgikUjXcxxyyCEAfPnLX+aee+7h\noosuoqKigiuvvJJ3332XOXPm4PF4KC4uZtasWbz77rsATJs2DYAJEybw2muvAVBTU9MnOEH6GdSo\nUaM4cOBA1/cHDhzoMTADxGIxbrvtNrZv387PfvYzPJ5Pan/+8Ic/5N/+7d/46le/yl/+8hfKysoc\nf15HHnkkJSUlABx22GG8//77XQEqkxlUuterqqriuuuu4xvf+AbV1dVMnz6dmpoannrqKdavX8/j\njz8OwL59+9i0aRM/+clPALjwwgtZtGgRxcXFrF69mrVr13LNNddw4403Ov5cZsyYgc/nA2DOnDns\n3r2beDze42cimXPtCNzYHGZPU9DxvvqmII3NYSbWuvbHI4P05ptvAlBfX8/+/fuZMGECEyZM4Be/\n+AUVFRWsWbOGsrIy7r33Xo444giWL1/O+vXreeGFF7qeIzGorVmzhtmzZ/P1r3+dxx57jF//+tec\nfPLJPPzww/zzP/8z7e3tvP7665x55pk9Hted1+u8ZJ1uBvX5z3+e2267jQsvvJCdO3cSi8W6Zk8J\n3/72tykpKeEXv/hF1+usWrWKXbt2cckllxAIBPB4PEnPAWDr1q1Eo1Ha2tp45513OPjgg7vuy2QG\nle71IpEIb731Fg888ADt7e2cf/75XHnllWzcuJGlS5eyZMkSGhoa+OMf/8icOXN6vN4tt9zCqaee\nyrx58ygvL8fj8XDooYfy3nvv0dTURFlZGZs2beLCCy/k5z//OdXV1Vx88cW8/fbbTJw4UcFpEFw7\nAtdU+qmtDrCnsW+Qqh5VQrg9SqgtknQWFWqLsLOhFYgzYUy543EdxxwAPEwYU6YZmYvU19dz3nnn\n0dLSws0334zP5+OGG25g5cqVxONxysvLufXWW/F4PHzve99j9erVVFRU4PP5aGtr6/FcM2bM4Jpr\nruGuu+4iFotx3XXXMX36dDZs2MA555xDe3s7p556KtOnT8/6+5gxYwZz5szhnHPOIRaL8e1vfxuA\n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\ngg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x11322fef0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 关于所有短评人的被关注数和好友数\n",
    "sns.jointplot(x=\"be_attention\", y=\"friend\", data=data_peo)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.5/site-packages/ipykernel_launcher.py:21: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>北京市</td>\n",
       "      <td>1572.960519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>新疆维吾尔自治区</td>\n",
       "      <td>1399.703704</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>oversea</td>\n",
       "      <td>1380.422166</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>云南省</td>\n",
       "      <td>1304.207273</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>西藏自治区</td>\n",
       "      <td>1211.393939</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>上海市</td>\n",
       "      <td>989.342950</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>台湾省</td>\n",
       "      <td>876.506494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>广东省</td>\n",
       "      <td>833.711997</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>广西壮族自治区</td>\n",
       "      <td>776.355263</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>四川省</td>\n",
       "      <td>729.574735</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "      index            0\n",
       "0       北京市  1572.960519\n",
       "1  新疆维吾尔自治区  1399.703704\n",
       "2   oversea  1380.422166\n",
       "3       云南省  1304.207273\n",
       "4     西藏自治区  1211.393939\n",
       "5       上海市   989.342950\n",
       "6       台湾省   876.506494\n",
       "7       广东省   833.711997\n",
       "8   广西壮族自治区   776.355263\n",
       "9       四川省   729.574735"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\nUs+a5DyMxw8xIvIFwOEYz/1/YO75MmdiHs6ehnnAmAqfBr4atf0r4BtKqQPHee9JwKOe5/WN9aLn\neTeP6p+n26d+HHPNHYPpKz+ilDo9em3Ce9PzvMc9z7uu3FAkxP4b6GLkw7ggTMiC91hF3Ah8OPq7\n3Onc7nleUSn1AKbjugtzk94w6rNXep73P9Hfn1JKvQ8zWP551PvOxgiZgyMBg1LqjcCFSqlk9J5t\nwNs9z9PA40qp69kn6sbjE57n/TJq73VRGy9nn3i5y/O8q6LXWzGD49vK24DLlVLHYwbqX2LEzWeV\nUm/3PK+EGbS6GD+vbC/G2xIAjymlbmCfZ+9lQDPmCbjsGn8jcI5SqhnTSb3I87z/i97/1ciW92NE\n4Hi8y/O8P0btvQbjkThbKbUxsvcYz/Mejt770ahj/A+MAHgf8AvP8z4Tvf549CT+ZaXUByfbB/B/\njOQDwNcrkpA3Rh6pbyulPj7aa6WUUsBzgbPKXkGl1Juidjoxno3XVXTQTymlrgOOrWjGwniG7ok+\nfyPmOnm/53laKfVJjLA7GuMFvBT4aMV3vjEauD6A+b5H4HneLqVUAAyNCv3+zvO8W6J9lgfYcz3P\nuz56/d8jUfVuzAAGxgPxnsiuL2AGrp96nnd11M73MEJjP5RSKUx+1xXlCSRKqY9Fx3MsRtwB7KpM\nrldKTet4K/hMxfH9CjOAvtnzvDzgKaU+ihlwr2Xy6+hQjEdjc3Q+L8P0IT2RtzYHFCcJrQfAyz3P\n2w38PTqubyil3o0RWkui13sim18CPBW9Vharf6jwXH5EKfWPwNsxomy6XAf8qeLe+rpS6r2Y7+I3\n0TYNfCQK+U2V73qe94voGD6M6ReeHh3LaJawzws0Fabbp/6+wlv2GaXU+zH92a1M7d4kOg4b+BH7\n7pHBadgsLHIaRVjdhBkID8B4Z26J4u9ghNSZSqlPY56IPzzqs4+N+r8PE5oYzbFAd1lUAXie52E6\naMx4yxNRB1Cml8kTPW+paK9fKfUII2/0Jyv+PgLznd0+qo0/s++p80qMO/w5wB8wHoefjBfWAjZG\noqpMf4XNx2KeLodd457n3Q7crpQ6BRM6vFIpVdl2DCPkJqLymDcqpbqjfbVGm++MzmeZRPQDZmAc\n7X37M+a8HDGFfYwWVicCp0RekjI25hpYz8jzD/u+m7sq2t/Lvqfo3yulTlNKfQLj6TgC46kZnZ/x\n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\nVCP/H7wlg8RGAac9AAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10b0042b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 被关注数放在地域上来看\n",
    "temp0 = (data_peo.groupby(by='province').sum().be_attention / data_peo.province.value_counts())\\\n",
    "        .sort_values(ascending=False).reset_index()\n",
    "\n",
    "df = pd.DataFrame({'NAME': temp0['index'].tolist()                    \n",
    "                   ,'NUM': temp0.ix[:,1].tolist()}\n",
    "                 )\n",
    "geod_china(df, 'Which province people came from are most popular in China? ', legend = True)\n",
    "temp0.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "/usr/local/lib/python3.5/site-packages/ipykernel_launcher.py:21: SettingWithCopyWarning: \n",
      "A value is trying to be set on a copy of a slice from a DataFrame\n",
      "\n",
      "See the caveats in the documentation: http://pandas.pydata.org/pandas-docs/stable/indexing.html#indexing-view-versus-copy\n"
     ]
    },
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>index</th>\n",
       "      <th>0</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>甘肃省</td>\n",
       "      <td>217.758621</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>西藏自治区</td>\n",
       "      <td>183.696970</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>台湾省</td>\n",
       "      <td>172.480519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>北京市</td>\n",
       "      <td>172.128718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>山西省</td>\n",
       "      <td>160.919540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>上海市</td>\n",
       "      <td>152.031109</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>oversea</td>\n",
       "      <td>150.802519</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>云南省</td>\n",
       "      <td>149.523636</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>山东省</td>\n",
       "      <td>147.319398</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>香港特别行政区</td>\n",
       "      <td>145.855297</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     index           0\n",
       "0      甘肃省  217.758621\n",
       "1    西藏自治区  183.696970\n",
       "2      台湾省  172.480519\n",
       "3      北京市  172.128718\n",
       "4      山西省  160.919540\n",
       "5      上海市  152.031109\n",
       "6  oversea  150.802519\n",
       "7      云南省  149.523636\n",
       "8      山东省  147.319398\n",
       "9  香港特别行政区  145.855297"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x10e71ae80>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "# 好友数放在地域上来看\n",
    "temp0 = (data_peo.groupby(by='province').sum().friend / data_peo.province.value_counts())\\\n",
    "        .sort_values(ascending=False).reset_index()\n",
    "\n",
    "df = pd.DataFrame({'NAME': temp0['index'].tolist()                    \n",
    "                   ,'NUM': temp0.ix[:,1].tolist()}\n",
    "                 )\n",
    "geod_china(df, 'Which province people came from have most friends in China? ', legend = True)\n",
    "temp0.head(10)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 5. 根据点评人个人简介构建中文文本分类模型"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [],
   "source": [
    "# label数据处理\n",
    "def fixIntro(x):\n",
    "    n = ''\n",
    "    for i in x:\n",
    "        n += i.strip()\n",
    "        n +=' '\n",
    "    return n\n",
    "data_peo['introduction'] = data_peo.introduction.apply(fixIntro)\n",
    "data_peo_b = data_peo[data_peo.province == '北京市']\n",
    "data_peo_s = data_peo[data_peo.province == '上海市']\n",
    "#data_peo_o = data_peo[data_peo.province == 'oversea']"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 切词\n",
    "import jieba \n",
    "import pandas as pd \n",
    "import random\n",
    "\n",
    "stopwords=pd.read_csv(\"../stopwords.txt\",index_col=False,quoting=3\n",
    "                      ,sep=\"\\t\",names=['stopword'], encoding='utf-8')\n",
    "stopwords=stopwords['stopword'].values\n",
    "\n",
    "def preprocess_text(content_lines,sentences,category): \n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append((\" \".join(segs), category))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue\n",
    "\n",
    "sentences=[]\n",
    "preprocess_text(data_peo_b.introduction.dropna().values.tolist() ,sentences ,'北京')\n",
    "preprocess_text(data_peo_s.introduction.dropna().values.tolist() ,sentences ,'上海')\n",
    "#preprocess_text(data_peo_o.introduction.dropna().values.tolist() ,sentences ,'国外')\n",
    "random.shuffle(sentences)            "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 切分训练集和测试集\n",
    "from sklearn.model_selection import train_test_split\n",
    "x,y=zip(*sentences)\n",
    "train_data,test_data,train_target,test_target=train_test_split(x, y, random_state=1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total words:9458\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "基于卷积神经网络的中文文本分类\n",
    "\"\"\"\n",
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import argparse\n",
    "import sys\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "import tensorflow as tf\n",
    "\n",
    "learn = tf.contrib.learn\n",
    "FLAGS = None\n",
    "# 文档最长长度\n",
    "MAX_DOCUMENT_LENGTH = 100\n",
    "# 最小词频数\n",
    "MIN_WORD_FREQUENCE = 2\n",
    "# 词嵌入的维度\n",
    "EMBEDDING_SIZE = 20\n",
    "# filter个数\n",
    "N_FILTERS = 10 # 10个神经元\n",
    "# 感知野大小\n",
    "WINDOW_SIZE = 20\n",
    "#filter的形状\n",
    "FILTER_SHAPE1 = [WINDOW_SIZE, EMBEDDING_SIZE]\n",
    "FILTER_SHAPE2 = [WINDOW_SIZE, N_FILTERS] \n",
    "# 池化\n",
    "POOLING_WINDOW = 4\n",
    "POOLING_STRIDE = 2\n",
    "n_words = 0\n",
    "\n",
    "def cnn_model(features, target):\n",
    "    \"\"\"\n",
    "    2层的卷积神经网络，用于短文本分类\n",
    "    \"\"\"\n",
    "    # 先把词转成词嵌入\n",
    "    # 我们得到一个形状为[n_words, EMBEDDING_SIZE]的词表映射矩阵\n",
    "    # 接着我们可以把一批文本映射成[batch_size, sequence_length,EMBEDDING_SIZE]的矩阵形式\n",
    "    target = tf.one_hot(target, 15, 1, 0) #对词编码\n",
    "    word_vectors = tf.contrib.layers.embed_sequence(features\n",
    "                                                    ,vocab_size=n_words\n",
    "                                                    ,embed_dim=EMBEDDING_SIZE\n",
    "                                                    ,scope='words')\n",
    "    word_vectors = tf.expand_dims(word_vectors, 3)\n",
    "    \n",
    "    with tf.variable_scope('CNN_Layer1'):\n",
    "        # 添加卷积层做滤波\n",
    "        conv1 = tf.contrib.layers.convolution2d(word_vectors\n",
    "                                                ,N_FILTERS\n",
    "                                                ,FILTER_SHAPE1\n",
    "                                                ,padding='VALID')\n",
    "        # 添加RELU非线性\n",
    "        conv1 = tf.nn.relu(conv1) \n",
    "        # 最大池化\n",
    "        pool1 = tf.nn.max_pool(conv1\n",
    "                               ,ksize=[1, POOLING_WINDOW, 1, 1]\n",
    "                               ,strides=[1, POOLING_STRIDE, 1, 1]\n",
    "                               ,padding='SAME')\n",
    "        # 对矩阵进行转置，以满足形状\n",
    "        pool1 = tf.transpose(pool1, [0, 1, 3, 2])\n",
    "    with tf.variable_scope('CNN_Layer2'):\n",
    "        # 第2卷积层\n",
    "        conv2 = tf.contrib.layers.convolution2d(pool1\n",
    "                                                ,N_FILTERS\n",
    "                                                ,FILTER_SHAPE2\n",
    "                                                ,padding='VALID') \n",
    "        # 抽取特征\n",
    "        pool2 = tf.squeeze(tf.reduce_max(conv2, 1), squeeze_dims=[1])\n",
    "        \n",
    "    # 全连接层\n",
    "    logits = tf.contrib.layers.fully_connected(pool2, 15, activation_fn=None)\n",
    "    loss = tf.losses.softmax_cross_entropy(target, logits) \n",
    "    # 优化器\n",
    "    train_op = tf.contrib.layers.optimize_loss(loss\n",
    "                                               ,tf.contrib.framework.get_global_step()\n",
    "                                               ,optimizer='Adam'\n",
    "                                               ,learning_rate=0.01)\n",
    "    \n",
    "    return ({\n",
    "            'class': tf.argmax(logits, 1),\n",
    "            'prob': tf.nn.softmax(logits)\n",
    "    }, loss, train_op)\n",
    "\n",
    "global n_words\n",
    "# 处理词汇\n",
    "vocab_processor = learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH\n",
    "                                                          ,min_frequency=MIN_WORD_FREQUENCE) \n",
    "x_train = np.array(list(vocab_processor.fit_transform(train_data)))\n",
    "x_test = np.array(list(vocab_processor.transform(test_data)))\n",
    "n_words=len(vocab_processor.vocabulary_) \n",
    "print('Total words:%d'%n_words)\n",
    "\n",
    "cate_dic={'北京':0,'上海':1\n",
    "         # ,'国外':2\n",
    "         }\n",
    "y_train = pd.Series(train_target).apply(lambda x:cate_dic[x] , train_target)\n",
    "y_test = pd.Series(test_target).apply(lambda x:cate_dic[x] , test_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Using default config.\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpooq2vipv\n",
      "INFO:tensorflow:Using config: {'_evaluation_master': '', '_save_summary_steps': 100, '_session_config': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x124b90400>, '_is_chief': True, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_checkpoints_secs': 600, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpooq2vipv', '_environment': 'local', '_num_worker_replicas': 0, '_num_ps_replicas': 0, '_master': '', '_task_id': 0, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_task_type': None}\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Saving checkpoints for 1 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpooq2vipv/model.ckpt.\n",
      "INFO:tensorflow:step = 1, loss = 2.70956\n",
      "INFO:tensorflow:global_step/sec: 9.21467\n",
      "INFO:tensorflow:step = 101, loss = 0.710335 (10.854 sec)\n",
      "INFO:tensorflow:global_step/sec: 8.92832\n",
      "INFO:tensorflow:step = 201, loss = 0.64654 (11.203 sec)\n",
      "INFO:tensorflow:global_step/sec: 8.88006\n",
      "INFO:tensorflow:step = 301, loss = 0.434363 (11.259 sec)\n",
      "INFO:tensorflow:global_step/sec: 8.98412\n",
      "INFO:tensorflow:step = 401, loss = 0.221993 (11.131 sec)\n",
      "INFO:tensorflow:global_step/sec: 9.68079\n",
      "INFO:tensorflow:step = 501, loss = 0.267611 (10.330 sec)\n",
      "INFO:tensorflow:global_step/sec: 8.71513\n",
      "INFO:tensorflow:step = 601, loss = 0.277531 (11.474 sec)\n",
      "INFO:tensorflow:global_step/sec: 8.70385\n",
      "INFO:tensorflow:step = 701, loss = 0.152585 (11.488 sec)\n",
      "INFO:tensorflow:global_step/sec: 8.53095\n",
      "INFO:tensorflow:step = 801, loss = 0.208412 (11.723 sec)\n",
      "INFO:tensorflow:global_step/sec: 9.16308\n",
      "INFO:tensorflow:step = 901, loss = 0.178486 (10.913 sec)\n",
      "INFO:tensorflow:Saving checkpoints for 1000 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpooq2vipv/model.ckpt.\n",
      "INFO:tensorflow:Loss for final step: 0.143272.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmpooq2vipv/model.ckpt-1000\n",
      "Accuracy:0.554530\n"
     ]
    }
   ],
   "source": [
    "# 构建模型\n",
    "classifier=learn.SKCompat(learn.Estimator(model_fn=cnn_model))\n",
    "\n",
    "# 训练和预测\n",
    "classifier.fit(x_train,y_train,steps=1000) \n",
    "y_predicted=classifier.predict(x_test)['class'] \n",
    "score=metrics.accuracy_score(y_test,y_predicted) \n",
    "print('Accuracy:{0:f}'.format(score))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": [
    "def pred(commment):\n",
    "    sentences=[]\n",
    "    preprocess_text([commment] ,sentences, 'unknown')\n",
    "    x,y=zip(*sentences)\n",
    "    x_tt = np.array(list(vocab_processor.transform([x[0]])))\n",
    "    \n",
    "    if classifier.predict(x_tt)['class'][0]:\n",
    "        print('like')\n",
    "    else:\n",
    "        print('nlike')\n",
    "pred('好精彩的电影！')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 245,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 216,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "(759, 6)\n"
     ]
    }
   ],
   "source": [
    "# 读入评论过《肖生克救赎》的点评人\n",
    "data_peo_X = pd.read_json('../douban_movie/data/movie_Xpeople1040.json', lines=True)\n",
    "# 去掉空值\n",
    "data_peo_X = data_peo_X[~data_peo_X.friend.apply(lambda x: not (x[:])) \n",
    "         & ~data_peo_X.be_attention.apply(lambda x: not (x[:])) \\\n",
    "        & ~data_peo_X.location.apply(lambda x: not (x[:])) \\\n",
    "        & ~data_peo_X.introduction.apply(lambda x: not (x[:])) \\\n",
    "        & ~data_peo_X.people.apply(lambda x: not (x[:]))\n",
    "                         ]\n",
    "data_peo_X['friend'] = data_peo_X.friend.apply(lambda x: int(str(x[0])[2:]) )\n",
    "data_peo_X['be_attention'] = data_peo_X.be_attention.apply(lambda x: int(re.findall(r\"被(\\d+)人\", str(x))[0]) )\n",
    "data_peo_X['location'] = data_peo_X.location.apply(lambda x: x[0])\n",
    "data_peo_X['time'] = pd.to_datetime(data_peo_X.people.apply(lambda x: str(x[1])[:-2] ))\n",
    "data_peo_X['people'] = data_peo_X.people.apply(lambda x: x[0].strip())\n",
    "print(data_peo_X.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 217,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 规范化地理信息\n",
    "data_peo_X['province'] = data_peo_X.location.apply(locaP)\n",
    "data_peo_X.province.fillna('oversea', inplace = True)\n",
    "data_peo_X['country'] = data_peo_X.location.apply(lambda x : x.split(sep = ',')[-1].strip()).apply(locaC)\n",
    "data_peo_X.country.fillna('China', inplace = True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 250,
   "metadata": {},
   "outputs": [],
   "source": [
    "data_com['people'] = data_com.people_url.apply(lambda x: x[30:-1])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 219,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 从短评数据中，抽取该759人的短评信息\n",
    "def findpeo(x):\n",
    "    peolist = data_peo_X.people.tolist()\n",
    "    if x in peolist:\n",
    "        return True\n",
    "    else:\n",
    "        return False"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 265,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(27217, 10)"
      ]
     },
     "execution_count": 265,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "data_com_759 = data_com[data_com.people.apply(findpeo)]\n",
    "data_com_759.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 269,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.text.Text at 0x16fe6ef98>"
      ]
     },
     "execution_count": 269,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n9JIkp3T32VV1apLjq+rvktwnyT2S3DzJu5LcbTPqHdkuPouXJXlKd19QVT+X5FeSPC2z6+PY7v7K\n5lQ6vl18Fkdmp+/qqvrRuC4WaufPobsfPi2/UZIPJvnFadPbJvmR7l66nsncxrZr90ryJ0nS3ecm\nuevmlrNU3pHkWdP0tsx+CToyyYOq6kNV9fqqOmzNV7Mv3TnJ9arqvVX1gaq6d5Lrdvel01+Wf5rk\nmM0tcblU1V0z+7J6TWbXxYlV9eGq2l5VfrxanEuTPHTV/JFJdrSinZXZdXCvzFo7V7r780kOqqrv\n39gyl8LOn8XDu/uCafqgJN+e7s64bZLXVNVHqurEjS5ySezqutj5u9p1sXg7fw47PDfJK7r7i1V1\nsyQ3THJmVf15VT14QyvcZMLOrn1vktXN3df4h8TG6O5vdPcV01+S70xySpKPJvnl7r53Zi0Kz97M\nGpfItzK7TerYJE9M8sZp2Q5XJLnBJtS1zJ6R2RdYkrwvyVOS3DvJoZl9RizA1Hp21apF21b9Orrj\nOtj5e8P1sQA7fxbd/cUkqaofT/LkJC9Ncv3Mbm17VJKfTPKkqrrTxlc7tl1cF7v6rnZdLNguPodU\n1U2T3C/THQFJrpPZXUonZBaMXjptsxSEnV27PMnq1oMDuvvqzSpm2VTVzTNren1Ld789yend/bFp\n9elJ7rJpxS2XTyd56/SL3Kcz+8K68ar1hyW5bFMqW0JVdcMk1d0fnBa9obs/M/2j+4y4LjbStaum\nd1wHO39vuD42SFU9LMmpSR7U3f+U2Y8yL+vub3X3FUk+kFlLNYu1q+9q18Xm+K9J3t7d10zzX0py\nandf3d3/mOT8JLVp1W0wYWfXPpLkp5JkembnE5tbzvKYmlrfm+RXuvsN0+I/raq7T9P3S/KxXb6Y\nfe3EzH4JSlX9YJLrJflmVd26qrZl1uLz4U2sb9ncO8n7k2Q6/xdW1Q9N61wXG+v8qjp6mn5gZtfB\nR5IcW1UHVNUtMvuRzPMiC1ZVj8qsRefo7v7MtPh2ST5SVQdOnd7cK8lfb1aNS2RX39Wui81xTGa3\n2K6ef0eSVNWhSe6Q5OJNqGtTuDVr105Pcv+q+ovMnht53CbXs0yekeRGSZ5VVTue3XlaZk2uV2X2\n68QTNqu4JfP6JKdV1Z9n1uvUiZn9ov22JAdmdh/2eZtY37KpzG4NSXevVNXjk/xBVV2Z5FNJXruZ\nxS2Zk5O8tqquk9k/GN7Z3ddU1YeT/GVmPySetJkFLoOqOjDJy5N8PrNrIUnO6e5nV9Vbkpyb2e09\nb+7uT25epUvjfyR5xerv6u6+3HWxKf7l+yJJuvusqjq2qs7N7Hv8GcsUOretrCxdpwwAAMAScBsb\nAAAwJGEHAAAYkrADAAAMSdgBAACGJOwAAABDEnYAAIAhCTsAW0RVHV5VK1V1/52Wf66qDt8H+98n\n+9nDMW5RVX9TVR+rqsP2sO3hVfW5dR7vg+t5/f6kqu5eVS/c7DoAthJhB2BruSqzAS13GxT2Y0cn\n+evuPrK7r9ig443i9kluttlFAGwlBhUF2CKmVpezk7wvyUp3P2Fa/rnM/lF/eJLndPfR0/LTpu3P\nTvKHmY2ofcckfzUte2ySGyV5SHdfPO3n7CR3TvLtJD/X3RdW1c2SvDrJzTMbffvXuvvPquo5Se6Z\n5BZJXtndr1pV6+2SvCbJjZN8M8nPZxbU3p3k0CT/p7ufuGr7+yV5UZKVJP8vySOm7c5L8sEkd5iW\nn9DdX62qByd5fmY/2n1mqvXL03s4L8kRSd6f2ajuH+3ue+zmvB6TZPu0r79L8t+TfCPJbye531TT\nW7r7hVV1dJJnJtmW5NZJ3pnk60lOmJb91FTHl5KcmeSoJF9M8qrpHPxQksd29zlVdZskv5Pk+5J8\nK8lTuvv86XP7epIjp+2fm+T0JBdO52R7d79grfcDwL/SsgOw9Zyc5Nidb2fbgzsl+Y0kleRuSQ7v\n7h9L8rtJnrBqu0u6+y7Ttm+alr0syRu6+8gk/yXJq1e1LB3S3bdfHXQmb03y8u6+U5JfzCwUXJzk\n15O8e3XQmZyS5IndfdfMQsKPTsu/P8lLuvsOSb6c5OFVddPMwtcJ0/4/kuSVq/Z1VndXdz8pSfYQ\ndK6b5G1JHtPdd8wsUDwmyRMzC3d3SnL3JD9dVQ+aXnaPJI9L8iOZhal/muq+MMnDp21uluSPuvs/\nTfMP6e6jkjwnyVOnZW9K8vTu/tHMPoPfW1XazTMLSscleXF3X7bq3Ak6AHMSdgC2mO6+PMnP5ru7\nne1L3X1+d1+b5O8za/VIZi0ZN1q13eumY/xxkh+uqhsmOSbJ86rqgiRnJTk4s1aNZNaK8m9U1aFJ\nbtPdfzDt69wkX8ssaK3l3UlOr6pXJrm4u987Lf+H7v7oNP3JJDfJLHx8tLs/Ny1/TWYtMDv8u5p2\n445J/m93XzDV+ozufkWS+yY5rbuv6e5vZRaIdhzjou7+wrT8K1n7XJ61avkHVm8znaO7JXnjdF7f\nnuTQqvq+abv3dvdKkosyax0DYC8IOwBb0BQG3pfZ7Vc7rGR2K9UOB6+a/s5Ou7h6jV3vvPw7SQ5M\nct/uPqK7j8js1rVPTOuv3MU+DtipjkzzB61xzHT3SzO7Fe9vk7yoqp65i3p2vL+dv7t23veualrL\nVatnquoGVfVDezjGXOeyu7+zm20OTPLtHed0Oq/3yCwUJrPbCDMFHgD2krADsHWdnOTYJD84zX8l\nya2q6pCqunFmt0F9tx6ZJFX1kCR/M7VefCDJk6blt8/sdq3rrbWDqeXp0qp66PSaeyb5gcxaKXap\nqs5Lclh3/3aSl+Zfb2PblfOS3HNVz3FPyOy5nl25pqrWDFlJOsn3T+8rSZ6e2S1sH0jymKo6sKqu\nl9l52Wc9u3X315NcUlWPSpLplsQP7eFlV2c3gRGAf0/YAdiiVt3OdvA0/8kk78nsdq93JPnwXuz2\ndtNtVU/L7NmVJHlKZuHiwiS/n+TRc/Sk9qgkP19Vn8jseZqH7tTSsbNnJDmtqj6WWXh59lobdveX\np21Or6pPZtYitPMzQDuckeTjVXXIGvv69lTrm6f3d/skv5XZM0F/n+TjSc7P7FmZ03dT/954ZJLH\nT8f9zSQP20NLzkcz+xx+ax/XATAsvbEBAABD0hwOwPCmwUVvtItVp3b3qRtdDwAbQ8sOAAAwJM/s\nAAAAQxJ2AACAIQk7AADAkIQdAABgSP8fncv8396oCC0AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x16fdef160>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "from __future__ import division, print_function\n",
    "from matplotlib import pyplot as plt\n",
    "%matplotlib inline\n",
    "import matplotlib\n",
    "import seaborn as sns\n",
    "matplotlib.rc('figure', figsize = (14, 7))\n",
    "matplotlib.rc('font', size = 14)\n",
    "matplotlib.rc('axes', grid = False)\n",
    "matplotlib.rc('axes', facecolor = 'white')\n",
    "\n",
    "data_com_759.people.value_counts().hist(bins=100)\n",
    "plt.ylabel('Number of people')\n",
    "plt.xlabel('Number of short_comment')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 378,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>肖申克的救赎 The Shawshank Redemption</th>\n",
       "      <td>42</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>千与千寻 千と千尋の神隠し</th>\n",
       "      <td>35</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>放牛班的春天 Les choristes</th>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>情书 Love Letter</th>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>勇敢的心 Braveheart</th>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>暖暖内含光 Eternal Sunshine of the Spotless Mind</th>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>阿甘正传 Forrest Gump</th>\n",
       "      <td>34</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>阳光灿烂的日子</th>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>美丽人生 La vita è bella</th>\n",
       "      <td>33</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>两杆大烟枪 Lock, Stock and Two Smoking Barrels</th>\n",
       "      <td>32</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                                             Num\n",
       "肖申克的救赎 The Shawshank Redemption               42\n",
       "千与千寻 千と千尋の神隠し                                 35\n",
       "放牛班的春天 Les choristes                          34\n",
       "情书 Love Letter                                34\n",
       "勇敢的心 Braveheart                               34\n",
       "暖暖内含光 Eternal Sunshine of the Spotless Mind   34\n",
       "阿甘正传 Forrest Gump                             34\n",
       "阳光灿烂的日子                                       33\n",
       "美丽人生 La vita è bella                          33\n",
       "两杆大烟枪 Lock, Stock and Two Smoking Barrels     32"
      ]
     },
     "execution_count": 378,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 取出评价过100次以上的短评小王子\n",
    "coolpeo_list = data_com_759.people.value_counts()[data_com_759.people.value_counts() >=100].index.tolist()\n",
    "# 短评小王子的短评\n",
    "coolpeo_com = data_com_759[data_com_759.people.apply(lambda x: x in coolpeo_list)]\n",
    "# 取出短评小王子评价过的电影\n",
    "coolpeo_movie_id = coolpeo_com.movie_id.value_counts().index.tolist()\n",
    "coolpeo_item = data_item[data_item.movie_id.apply(lambda x: x in coolpeo_movie_id)]\n",
    "coolpeo_item_com = pd.merge(coolpeo_item, coolpeo_com, how='right' ,on='movie_id')\n",
    "#“短评小王子”最爱评价的前十部电影\n",
    "pd.DataFrame(coolpeo_item_com.movie_title.value_counts().head(10).values \n",
    "             ,index=coolpeo_item_com.movie_title.value_counts().head(10).index.values , columns = ['Num'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 379,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Num</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>美国</th>\n",
       "      <td>1823</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>日本</th>\n",
       "      <td>535</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>香港</th>\n",
       "      <td>280</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>美国 / 德国</th>\n",
       "      <td>140</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>中国大陆 / 香港</th>\n",
       "      <td>123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>美国 / 英国</th>\n",
       "      <td>115</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>英国 / 美国</th>\n",
       "      <td>110</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>英国</th>\n",
       "      <td>108</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>美国 / 加拿大</th>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>韩国</th>\n",
       "      <td>87</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            Num\n",
       "美国         1823\n",
       "日本          535\n",
       "香港          280\n",
       "美国 / 德国     140\n",
       "中国大陆 / 香港   123\n",
       "美国 / 英国     115\n",
       "英国 / 美国     110\n",
       "英国          108\n",
       "美国 / 加拿大     87\n",
       "韩国           87"
      ]
     },
     "execution_count": 379,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(coolpeo_item_com.country.value_counts().head(10).values \n",
    "             ,index=coolpeo_item_com.country.value_counts().head(10).index.values , columns = ['Num'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 436,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "剧情 193436\n",
      "爱情 61768\n",
      "喜剧 49752\n",
      "科幻 25558\n",
      "动作 32853\n",
      "悬疑 29719\n",
      "犯罪 45810\n",
      "恐怖 2060\n",
      "青春 0\n",
      "励志 0\n",
      "战争 17099\n",
      "文艺 0\n",
      "幽默 0\n",
      "传记 12418\n",
      "情色 1040\n",
      "暴力 0\n",
      "音乐 7259\n",
      "家庭 27877\n"
     ]
    }
   ],
   "source": [
    "l = ['genre_剧情', 'genre_爱情', 'genre_喜剧', 'genre_科幻',\n",
    "       'genre_动作', 'genre_悬疑', 'genre_犯罪', 'genre_恐怖', 'genre_青春', 'genre_励志',\n",
    "       'genre_战争', 'genre_文艺', 'genre_黑色幽默', 'genre_传记', 'genre_情色',\n",
    "       'genre_暴力', 'genre_音乐', 'genre_家庭']\n",
    "data_item_com = pd.merge(data_item, data_com, how='right' ,on='movie_id')\n",
    "for i in l:\n",
    "    print(i[-2:], data_item_com[data_item_com[i] ==1].shape[0])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 435,
   "metadata": {},
   "outputs": [],
   "source": []
  },
  {
   "cell_type": "code",
   "execution_count": 437,
   "metadata": {},
   "outputs": [],
   "source": [
    "# 数据准备 ================================================\n",
    "data_X = data_item_com[data_item_com.genre_喜剧 ==1]\n",
    "data_F = data_item_com[data_item_com.genre_犯罪 ==1]\n",
    "\n",
    "import jieba \n",
    "import pandas as pd \n",
    "import random\n",
    "\n",
    "stopwords=pd.read_csv(\"../stopwords.txt\",index_col=False,quoting=3\n",
    "                      ,sep=\"\\t\",names=['stopword'], encoding='utf-8')\n",
    "stopwords=stopwords['stopword'].values\n",
    "\n",
    "def preprocess_text(content_lines,sentences,category): \n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append((\" \".join(segs), category))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue\n",
    "\n",
    "# 切词 ====================================================\n",
    "import jieba \n",
    "import pandas as pd \n",
    "import random\n",
    "\n",
    "stopwords=pd.read_csv(\"../stopwords.txt\",index_col=False,quoting=3\n",
    "                      ,sep=\"\\t\",names=['stopword'], encoding='utf-8')\n",
    "stopwords=stopwords['stopword'].values\n",
    "\n",
    "def preprocess_text(content_lines,sentences,category): \n",
    "    for line in content_lines:\n",
    "        try:\n",
    "            segs=jieba.lcut(line)\n",
    "            segs = filter(lambda x:len(x)>1, segs)\n",
    "            segs = filter(lambda x:x not in stopwords, segs)\n",
    "            sentences.append((\" \".join(segs), category))\n",
    "        except:\n",
    "            print(line)\n",
    "            continue\n",
    "\n",
    "sentences=[]\n",
    "preprocess_text(data_X.content.dropna().values.tolist() ,sentences ,'喜剧')\n",
    "preprocess_text(data_F.content.dropna().values.tolist() ,sentences ,'犯罪')\n",
    "random.shuffle(sentences)       \n",
    "\n",
    "# 切分训练集和测试集 ========================================\n",
    "from sklearn.model_selection import train_test_split\n",
    "x,y=zip(*sentences)\n",
    "train_data,test_data,train_target,test_target=train_test_split(x, y, random_state=1234)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 438,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Total words:18613\n"
     ]
    }
   ],
   "source": [
    "\"\"\"\n",
    "基于卷积神经网络的中文文本分类\n",
    "\"\"\"\n",
    "from __future__ import absolute_import\n",
    "from __future__ import division\n",
    "from __future__ import print_function\n",
    "\n",
    "import argparse\n",
    "import sys\n",
    "import numpy as np\n",
    "import pandas as pd\n",
    "from sklearn import metrics\n",
    "import tensorflow as tf\n",
    "\n",
    "learn = tf.contrib.learn\n",
    "FLAGS = None\n",
    "# 文档最长长度\n",
    "MAX_DOCUMENT_LENGTH = 100\n",
    "# 最小词频数\n",
    "MIN_WORD_FREQUENCE = 2\n",
    "# 词嵌入的维度\n",
    "EMBEDDING_SIZE = 20\n",
    "# filter个数\n",
    "N_FILTERS = 10 # 10个神经元\n",
    "# 感知野大小\n",
    "WINDOW_SIZE = 20\n",
    "#filter的形状\n",
    "FILTER_SHAPE1 = [WINDOW_SIZE, EMBEDDING_SIZE]\n",
    "FILTER_SHAPE2 = [WINDOW_SIZE, N_FILTERS] \n",
    "# 池化\n",
    "POOLING_WINDOW = 4\n",
    "POOLING_STRIDE = 2\n",
    "n_words = 0\n",
    "\n",
    "def cnn_model(features, target):\n",
    "    \"\"\"\n",
    "    2层的卷积神经网络，用于短文本分类\n",
    "    \"\"\"\n",
    "    # 先把词转成词嵌入\n",
    "    # 我们得到一个形状为[n_words, EMBEDDING_SIZE]的词表映射矩阵\n",
    "    # 接着我们可以把一批文本映射成[batch_size, sequence_length,EMBEDDING_SIZE]的矩阵形式\n",
    "    target = tf.one_hot(target, 15, 1, 0) #对词编码\n",
    "    word_vectors = tf.contrib.layers.embed_sequence(features\n",
    "                                                    ,vocab_size=n_words\n",
    "                                                    ,embed_dim=EMBEDDING_SIZE\n",
    "                                                    ,scope='words')\n",
    "    word_vectors = tf.expand_dims(word_vectors, 3)\n",
    "    \n",
    "    with tf.variable_scope('CNN_Layer1'):\n",
    "        # 添加卷积层做滤波\n",
    "        conv1 = tf.contrib.layers.convolution2d(word_vectors\n",
    "                                                ,N_FILTERS\n",
    "                                                ,FILTER_SHAPE1\n",
    "                                                ,padding='VALID')\n",
    "        # 添加RELU非线性\n",
    "        conv1 = tf.nn.relu(conv1) \n",
    "        # 最大池化\n",
    "        pool1 = tf.nn.max_pool(conv1\n",
    "                               ,ksize=[1, POOLING_WINDOW, 1, 1]\n",
    "                               ,strides=[1, POOLING_STRIDE, 1, 1]\n",
    "                               ,padding='SAME')\n",
    "        # 对矩阵进行转置，以满足形状\n",
    "        pool1 = tf.transpose(pool1, [0, 1, 3, 2])\n",
    "    with tf.variable_scope('CNN_Layer2'):\n",
    "        # 第2卷积层\n",
    "        conv2 = tf.contrib.layers.convolution2d(pool1\n",
    "                                                ,N_FILTERS\n",
    "                                                ,FILTER_SHAPE2\n",
    "                                                ,padding='VALID') \n",
    "        # 抽取特征\n",
    "        pool2 = tf.squeeze(tf.reduce_max(conv2, 1), squeeze_dims=[1])\n",
    "        \n",
    "    # 全连接层\n",
    "    logits = tf.contrib.layers.fully_connected(pool2, 15, activation_fn=None)\n",
    "    loss = tf.losses.softmax_cross_entropy(target, logits) \n",
    "    # 优化器\n",
    "    train_op = tf.contrib.layers.optimize_loss(loss\n",
    "                                               ,tf.contrib.framework.get_global_step()\n",
    "                                               ,optimizer='Adam'\n",
    "                                               ,learning_rate=0.01)\n",
    "    \n",
    "    return ({\n",
    "            'class': tf.argmax(logits, 1),\n",
    "            'prob': tf.nn.softmax(logits)\n",
    "    }, loss, train_op)\n",
    "\n",
    "global n_words\n",
    "# 处理词汇\n",
    "vocab_processor = learn.preprocessing.VocabularyProcessor(MAX_DOCUMENT_LENGTH\n",
    "                                                          ,min_frequency=MIN_WORD_FREQUENCE) \n",
    "x_train = np.array(list(vocab_processor.fit_transform(train_data)))\n",
    "x_test = np.array(list(vocab_processor.transform(test_data)))\n",
    "n_words=len(vocab_processor.vocabulary_) \n",
    "print('Total words:%d'%n_words)\n",
    "\n",
    "cate_dic={'喜剧':0,'犯罪':1}\n",
    "y_train = pd.Series(train_target).apply(lambda x:cate_dic[x] , train_target)\n",
    "y_test = pd.Series(test_target).apply(lambda x:cate_dic[x] , test_target)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 439,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Using default config.\n",
      "WARNING:tensorflow:Using temporary folder as model directory: /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp49oopogr\n",
      "INFO:tensorflow:Using config: {'_evaluation_master': '', '_save_summary_steps': 100, '_session_config': None, '_cluster_spec': <tensorflow.python.training.server_lib.ClusterSpec object at 0x159628f98>, '_is_chief': True, '_tf_config': gpu_options {\n",
      "  per_process_gpu_memory_fraction: 1\n",
      "}\n",
      ", '_tf_random_seed': None, '_save_checkpoints_secs': 600, '_keep_checkpoint_every_n_hours': 10000, '_model_dir': '/var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp49oopogr', '_environment': 'local', '_num_worker_replicas': 0, '_num_ps_replicas': 0, '_master': '', '_task_id': 0, '_save_checkpoints_steps': None, '_keep_checkpoint_max': 5, '_task_type': None}\n",
      "INFO:tensorflow:Create CheckpointSaverHook.\n",
      "INFO:tensorflow:Saving checkpoints for 1 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp49oopogr/model.ckpt.\n",
      "INFO:tensorflow:step = 1, loss = 2.70988\n",
      "INFO:tensorflow:global_step/sec: 9.64956\n",
      "INFO:tensorflow:step = 101, loss = 0.696245 (10.365 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.9168\n",
      "INFO:tensorflow:step = 201, loss = 0.692725 (9.160 sec)\n",
      "INFO:tensorflow:global_step/sec: 11.0879\n",
      "INFO:tensorflow:step = 301, loss = 0.651439 (9.019 sec)\n",
      "INFO:tensorflow:global_step/sec: 10.4766\n",
      "INFO:tensorflow:step = 401, loss = 0.572262 (9.545 sec)\n",
      "INFO:tensorflow:global_step/sec: 11.197\n",
      "INFO:tensorflow:step = 501, loss = 0.54978 (8.930 sec)\n",
      "INFO:tensorflow:global_step/sec: 11.1421\n",
      "INFO:tensorflow:step = 601, loss = 0.469021 (8.975 sec)\n",
      "INFO:tensorflow:global_step/sec: 11.1101\n",
      "INFO:tensorflow:step = 701, loss = 0.477654 (9.002 sec)\n",
      "INFO:tensorflow:global_step/sec: 11.1988\n",
      "INFO:tensorflow:step = 801, loss = 0.510625 (8.929 sec)\n",
      "INFO:tensorflow:global_step/sec: 11.0627\n",
      "INFO:tensorflow:step = 901, loss = 0.435694 (9.040 sec)\n",
      "INFO:tensorflow:Saving checkpoints for 1000 into /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp49oopogr/model.ckpt.\n",
      "INFO:tensorflow:Loss for final step: 0.447175.\n",
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp49oopogr/model.ckpt-1000\n",
      "Accuracy:0.734335\n"
     ]
    }
   ],
   "source": [
    "# 构建模型\n",
    "classifier=learn.SKCompat(learn.Estimator(model_fn=cnn_model))\n",
    "\n",
    "# 训练和预测\n",
    "classifier.fit(x_train,y_train,steps=1000) \n",
    "y_predicted=classifier.predict(x_test)['class'] \n",
    "score=metrics.accuracy_score(y_test,y_predicted) \n",
    "print('Accuracy:{0:f}'.format(score))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 441,
   "metadata": {},
   "outputs": [],
   "source": [
    "def pred(commment):\n",
    "    sentences=[]\n",
    "    preprocess_text([commment] ,sentences, 'unknown')\n",
    "    x,y=zip(*sentences)\n",
    "    x_tt = np.array(list(vocab_processor.transform([x[0]])))\n",
    "    \n",
    "    if classifier.predict(x_tt)['class'][0]:\n",
    "        print('犯罪片！')\n",
    "    else:\n",
    "        print('喜剧片！')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 444,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp49oopogr/model.ckpt-1000\n",
      "喜剧片！\n"
     ]
    }
   ],
   "source": [
    "pred('太搞笑了！')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 445,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "INFO:tensorflow:Restoring parameters from /var/folders/g7/yj72g89x2mx2b1_r5zb22l940000gn/T/tmp49oopogr/model.ckpt-1000\n",
      "犯罪片！\n"
     ]
    }
   ],
   "source": [
    "pred('罪有应得啊！')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.1"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
